BST [homework]这种迭代遍历方法如何工作?

时间:2013-02-13 22:53:35

标签: binary-search-tree tree-traversal

我正在使用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;
} }
从我可以看到它自动转到父级,即使根没有?

1 个答案:

答案 0 :(得分:1)

root的父级是nil,所以算法一旦离开它的父节点就会终止(在访问右子树之后它会这样做。)