【发布时间】:2016-04-27 20:04:59
【问题描述】:
从这里学习 morris 中序遍历:http://www.geeksforgeeks.org/inorder-tree-traversal-without-recursion-and-without-stack/ 和 Explain Morris inorder tree traversal without using stacks or recursion
我很困惑。 cmets中有3个问题。欢迎帮助。谢谢
while (current != null) {
if (current.left == null) {
visit(current);
current = current.right;
} else {
pre = current.left;
while (pre.right != null && pre.right != current) {
pre = pre.right;
} // Q1: why "pre.right != current"?
// pre is initialized as current.left and will go right until null,
// why compare pre.right with current?
if (pre.right == null) {
pre.right = current;
current = current.left;
} else { // Q2: In which case, pre.right is not null and program gets here?
pre.right = null;// Q3: why set pre.right to null?
visit(current);
current = current.right;
}
}
}
【问题讨论】:
-
问题在哪里?
标签: algorithm tree binary-tree graph-traversal