java 二叉树迭代器_java – 二叉树的顺序迭代器

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:55   1515   0

子树的第一个元素总是最左边的元素。元素之后的下一个元素是其右子树的第一个元素。如果元素没有正确的子元素,则下一个元素是元素的第一个正确的祖先。如果元素既没有正确的子节点也没有正确的祖先,它是最右边的元素,它是迭代的最后一个。

我希望我的代码是人类可读的,涵盖所有案例。

public class TreeIterator{

private Node next;

public TreeIterator(Node root){

next = root;

if(next == null)

return;

while (next.left != null)

next = next.left;

}

public boolean hasNext(){

return next != null;

}

public Node next(){

if(!hasNext()) throw new NoSuchElementException();

Node r = next;

// if you can walk right, walk right, then fully left.

// otherwise, walk up until you come from left.

if(next.right != null){

next = next.right;

while (next.left != null)

next = next.left;

return r;

}else while(true){

if(next.parent == null){

next = null;

return r;

}

if(next.parent.left == next){

next = next.parent;

return r;

}

next = next.parent;

}

}

}

考虑下面的树:

d

/ \

b f

/ \ / \

a c e g

>第一个元素是“完全离开根”> a没有一个合适的孩子,所以下一个元素是“直到你来自左边”> b有一个正确的孩子,所以迭代b的右子树> c没有合适的孩子。父是b,已经被遍历了。下一个父母是d,没有被遍历,所以停在这里。> d有一个正确的子树。其最左边的元素是e。> …g没有正确的子树,所以走了。 f已经到访了,因为我们来自右边。 d已被访问。 d没有父母,所以我们不能再进一步。我们来自最右边的节点,我们完成了迭代。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP