微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java – 通过二叉搜索树迭代找到所有的树叶

我对树很新,我正在尝试创建一种“叶迭代器”.我认为它应该把没有.left和.right值的所有节点放在一个堆栈上,但我不知道如何,甚至是正确的做法.我已经尝试搜索它,但是我来的每一个例子都是从最左边的叶子开始,然后去p = node.parent,我避免链接到节点的父节点.

我不明白我怎么能从根本上重新开始,经过葡萄藤,而不是一遍又一遍地访问葡萄藤.

编辑

我看到人们建议使用递归方法解决这个问题,我现在同意.但是我一直在试图找到一个迭代器类方法解决这个问题一段时间,而且我仍然想知道是否可能,以及如何!

解决方法

使用递归:
public void visitNode(Node node) {
    if(node.left != null) {
        visitNode(node.left);
    }
    if(node.right != null) {
        visitNode(node.right);
    }
    if(node.left == null && node.right == null) {
        //OMG! leaf!
    }
}

通过提供root来启动它:

visitNode(root);

为了将其转换为迭代器<节点>你必须将递归转换为循环,然后使用状态进行遍历.不平凡,但应该给你很多的乐趣.

原文地址:https://www.jb51.cc/java/120412.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐