【发布时间】:2015-08-02 09:55:38
【问题描述】:
我有以下二叉树
3
/ \
5 2
/ \ /
1 4 6
我的周是递归,所以请耐心等待,我需要你的帮助来追踪它以使其正确。
我有以下代码,它的作用是在 Post Order 中打印节点。 所以答案是 1 4 5 6 2 3
void Postorder(Node root) {
if(root == null){
return;
}
Postorder(root.left);
Postorder(root.right);
System.out.print(root.data + " ");
}
让我们追踪:
Root = 3 (top node), not null, Root.left(5) - 回到函数
Root = 5, Not null, Root.left(1) - 返回函数
Root = 1, Not null, Root.left(null), continue, Root.right(null)
打印 1
现在这就是我感到困惑的地方,Root = 1 在这一点上,我看不出我如何回到 5,然后转到逻辑中的正确节点。另外,当我回到 5 时,我在哪里检查 1 是否被访问过?
我很困惑。
感谢您的帮助。
【问题讨论】:
-
在调试器中单步调试。
-
当所有
PostOrder(root.left)调用都返回时,您最多可以返回 5。您检查 1 是否已在System.out.print(root.data + " ")中被访问,就像所有其他节点一样。请记住,从节点 1 调用的PostOrder(root.left)和PostOrder(root.right)将在满足root == null条件时立即返回,只留下 System.out.print 为节点 1 执行。
标签: java binary-tree binary-search-tree