给定以下代码,我对如何按顺序遍历二叉搜索树的操作顺序感到有些困惑。
BinarySearchTree.prototype.inOrder = function() {
if (this.root == null) {
return null;
} else {
var result = new Array();
function traverseInOrder(node) {
node.left && traverseInOrder(node.left);
result.push(node.data);
node.right && traverseInOrder(node.right);
}
traverseInOrder(this.root);
return result;
};
}
我尝试添加调试器语句并跟踪,但是我在其中迷失了:
function traverseInOrder(node) {
node.left && traverseInOrder(node.left); //step 1
result.push(node.data); //step 2
node.right && traverseInOrder(node.right); //step 3
}
node.left && traverseInOrder(node.left);
(步骤1)会被执行,然后重复执行,直到没有node.left
。当没有node.left
时,会调用步骤2:result.push(node.data);
这是我不太理解的部分。现在尝试运行node.right && traverseInOrder(node.right)
,但是没有node.right
,但它并没有退出函数,而是返回到步骤2,result.push(node.data);
。
这是否源于步骤1中多次递归调用导致的排队?