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

前端之家收集整理的这篇文章主要介绍了java – 通过二叉搜索树迭代找到所有的树叶前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对树很新,我正在尝试创建一种“叶迭代器”.我认为它应该把没有.left和.right值的所有节点放在一个堆栈上,但我不知道如何,甚至是正确的做法.我已经尝试搜索它,但是我来的每一个例子都是从最左边的叶子开始,然后去p = node.parent,我避免链接到节点的父节点.

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

编辑

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

解决方法

@H_404_11@ 使用递归:
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);

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

猜你在找的Java相关文章