【发布时间】:2011-09-24 22:39:37
【问题描述】:
我有一个关于二叉搜索树的前序遍历的问题。我知道算法必须是什么样的,它非常简单:
void preOrder(Node node) {
print(node);
if (node.left() != null)
preOrder(node.left());
if (node.right() != null)
preOrder(node.right());
}
由于某种原因,我的函数只打印出根节点的左侧子树,并且两次打印出最低节点。我在右侧的一个项目上运行了search 方法,它返回 true,所以我认为我的插入工作正常。为什么会这样?
我的代码如下。公共方法调用私有方法。在私有节点中,前两个 if 语句用于打印连接到该节点的左右节点。最后两个执行实际的递归算法。
public void print() {
if (root == null)
System.out.println("Tree is empty");
else
print(root);
}
private void print(NodeBST node) {
printOut(node);
if (node.left() != null) {
System.out.print("Left: ");
printOut(node.left());
}
else
System.out.println("No left");
if (node.right() != null) {
System.out.print("Right: ");
printOut(node.right());
}
else
System.out.println("No right");
System.out.println("");
if (node.left() != null) {
node = node.left();
print(node);
}
if (node.right() != null) {
node = node.right();
print(node);
}
}
【问题讨论】:
-
你什么时候调用哪个方法? preOrder 和 print 都遍历树。
-
没有名为
preOrder的方法。printOut方法只打印出参数中节点的内容。基本上是System.out -
你为什么不使用 preOrder 极其简单的方案?
-
什么意思?这做同样简单的预购。它只有一堆 if 用于测试打印输出。 @Stuart 刚刚解决了。
标签: binary-tree traversal binary-search