Java 需要了解遍历二进制搜索树方法的帮助吗
我遇到了一个遍历二叉搜索树的函数,但我无法理解它。代码如下:Java 需要了解遍历二进制搜索树方法的帮助吗,java,recursion,binary-search-tree,Java,Recursion,Binary Search Tree,我遇到了一个遍历二叉搜索树的函数,但我无法理解它。代码如下: public void inOrderTraverseTree(Node focusNode){ if(focusNode != null){ inOrderTraverseTree(focusNode.leftChild); System.out.println(focusNode); inOrderTraverseTree(focusNode.rightChild);
public void inOrderTraverseTree(Node focusNode){
if(focusNode != null){
inOrderTraverseTree(focusNode.leftChild);
System.out.println(focusNode);
inOrderTraverseTree(focusNode.rightChild);
}
}
假设是“两级”平衡二叉搜索树,我就是这样理解这种递归方法的:
- 从
-->root!=null
方法运行inOrderTraverseTree(root.leftChild)
-->inOrderTraverseTree(root.leftChild.leftChild)方法正在运行root.leftChild!=null
- 但是,由于
没有leftChild-->root.leftChild
,因此focusNode.leftChild==null
循环将不会运行if
- 在这种情况下,难道这不意味着什么都不会被打印出来吗
但它应该是有效的()。有人能指出我哪里出错了吗?这里应用的逻辑:
null
,则返回到父级的索引树。但是,由于在检查null之后什么也没有发生,因此附加的return
语句与no语句完全相同
null
,则对左侧子节点重复(1)中的步骤返回到父节点的inOrderTraverseTree
根节点
节点,inOrderTraverseTree
只返回到main
,或者第一次调用它的方法
作为一个例子,考虑下面的树:
A
/ \
B C
/ \ / \
D E F G
跟踪:
A->inOrderTraverseTree(left)
B->inOrderTraverseTree(left)
D->inOrderTraverseTree(left) //null, return to D
print(D)
D->inOrderTraverseTree(right) //null, return to D
return to B
print(B)
B->inOrderTraverseTree(right)
E->inOrderTraverseTree(left) //null, return to E
print(E)
E->inOrderTraverseTree(right) //null, return to E
return to B
return to A
print(A)
A->inOrderTraverseTree(right)
//Continue for the right subtree.
这里应用的逻辑是:
null
,则返回到父级的索引树。但是,由于在检查null之后什么也没有发生,因此附加的return
语句与no语句完全相同
null
,则对左侧子节点重复(1)中的步骤返回到父节点的inOrderTraverseTree
根节点
节点,inOrderTraverseTree
只返回到main
,或者第一次调用它的方法
作为一个例子,考虑下面的树:
A
/ \
B C
/ \ / \
D E F G
跟踪:
A->inOrderTraverseTree(left)
B->inOrderTraverseTree(left)
D->inOrderTraverseTree(left) //null, return to D
print(D)
D->inOrderTraverseTree(right) //null, return to D
return to B
print(B)
B->inOrderTraverseTree(right)
E->inOrderTraverseTree(left) //null, return to E
print(E)
E->inOrderTraverseTree(right) //null, return to E
return to B
return to A
print(A)
A->inOrderTraverseTree(right)
//Continue for the right subtree.
但是,由于root.leftChild没有leftChild
-->focusNode.leftChild
==null
,if循环将不会运行
不,会的。因为它是递归的,所以它将继续执行以前的调用,在本例中检查righchild节点
观察函数的调用顺序:
它继续
但是,由于root.leftChild没有leftChild
-->focusNode.leftChild
==null
,if循环将不会运行
不,会的。因为它是递归的,所以它将继续执行以前的调用,在本例中检查righchild节点
观察函数的调用顺序:
继续…您需要了解这里的基本递归和二进制搜索树结构。让我们从下面的树中了解此算法: 步骤:
执行结束时您需要理解这里的基本递归和二叉搜索树结构。让我们从下面的树中了解此算法: 步骤:
执行完毕你说得对!没有“return”让我忘记了,语句在停止递归运行后将返回到调用点。你说得对!缺少“return”使我忘记了语句在停止进入递归运行后将返回到调用点。