我正在使用Pat Morin的免费书籍Open Data Structures(Java)中的一个例子。我相信我理解树遍历的概念(继续向左走,直到你不能再向左走,然后向右然后再回来。
但是,我对下面的代码感到有点沮丧。它如何知道更改结构中的分支,例如: r(oot)
|
- -
| |
a b
| |
c d
void traverse2() {
Node u = r, prev = nil, next;
while (u != nil) {
if (prev == u.parent) {
if (u.left != nil) next = u.left;
else if (u.right != nil) next = u.right;
else next = u.parent;
} else if (prev == u.left) {
if (u.right != nil) next = u.right;
else next = u.parent;
} else {
next = u.parent;
}
prev = u;
u = next;
} }
从我可以看到它自动转到父级,即使根没有?
答案 0 :(得分:1)
root的父级是nil,所以算法一旦离开它的父节点就会终止(在访问右子树之后它会这样做。)