// Recursive javascript program for level
// order traversal of Binary Tree
// Class containing left and right child of current
// node and key value
class Node {
constructor(val) {
this.data = val;
this.left = null;
this.right = null;
}
}
// Root of the Binary Tree
var root = null;
// Function to print level order traversal of tree
function printLevelOrder() {
var h = height(root);
var i;
// for (i = 1; i <= h; i++)
printCurrentLevel(root, h);
}
// Compute the "height" of a tree -- the number
// of nodes along the longest path
// from the root node down to the farthest leaf node.
function height(root) {
if (root == null)
return 0;
else {
// Compute height of each subtree
var lheight = height(root.left);
var rheight = height(root.right);
// Use the larger one
if (lheight > rheight)
return (lheight + 1);
else
return (rheight + 1);
}
}
// Print nodes at the current level
function printCurrentLevel(root, level) {
// alert("root data = "+root.data+" : level = "+level);
document.getElementById("demo").innerHTML = document.getElementById("demo").innerHTML + "<br/>" + "root data = " + root.data + " : level = " + level + "";
if (root == null)
return;
if (level == 1) {
//alert(root.data);
} else if (level > 1) {
printCurrentLevel(root.left, level - 1);
printCurrentLevel(root.right, level - 1);
}
}
// Driver program to test above functions
root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
root.right.left = new Node(6);
root.right.right = new Node(7);
root.left.left.left = new Node(8);
root.left.left.right = new Node(9);
console.log("Level order traversal of binary tree is ");
printLevelOrder();
<!DOCTYPE html>
<html>
<body>
<h2>My First JavaScript</h2>
<p id="demo"></p>
</body>
</html>
为什么上面的代码的输出是
root data = 1 : level = 4
root data = 2 : level = 3
root data = 4 : level = 2
root data = 8 : level = 1
root data = 9 : level = 1
root data = 5 : level = 2
当使用递归时,它不打印root data = 3: level = 3
如果注释如下所示的代码,则输出将为root data = 1 : level = 4
if (root == null)
// return ;
请帮助我理解这一点.
参考资料: https://www.geeksforgeeks.org/level-order-tree-traversal/个