यहां चौड़ाई के लिए एक जावा कोड है- पहली यात्रा:जावा या सी ++ में रिकर्सिव चौड़ाई-पहला यात्रा फ़ंक्शन?
void breadthFirstNonRecursive(){
Queue<Node> queue = new java.util.LinkedList<Node>();
queue.offer(root);
while(!queue.isEmpty()){
Node node = queue.poll();
visit(node);
if (node.left != null)
queue.offer(node.left);
if (node.right != null)
queue.offer(node.right);
}
}
क्या ऐसा करने के लिए एक रिकर्सिव फ़ंक्शन लिखना संभव है?
पहले, मैंने सोचा कि यह आसान होगा, इसलिए मैं इसके साथ बाहर आया:
void breadthFirstRecursive(){
Queue<Node> q = new LinkedList<Node>();
breadthFirst(root, q);
}
void breadthFirst(Node node, Queue<Node> q){
if (node == null) return;
q.offer(node);
Node n = q.poll();
visit(n);
if (n.left != null)
breadthFirst(n.left, q);
if (n.right != null)
breadthFirst(n.right, q);
}
तब मैंने पाया कि यह काम नहीं करता है। यह वास्तव में वही काम करता है:
void preOrder(Node node) {
if (node == null) return;
visit(node);
preOrder(node.left);
preOrder(node.right);
}
क्या किसी ने इससे पहले इस बारे में सोचा है?
संयोग से, कर BFS रिकर्सिवली शायद अपनी ढेर राज्य अंतरिक्ष के आकार में विकसित करने के लिए कारण होगा। यदि आपका समाधान गहराई से है, तो समाधान खोजने के लिए आवश्यक स्टैक स्पेस बी^डी होगा जहां बी शाखाकरण कारक है। – Eric