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);

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...