我对树很新,我正在尝试创建一种“叶迭代器”.我认为它应该把没有.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);
为了将其转换为迭代器<节点>你必须将递归转换为循环,然后使用状态进行遍历.不平凡,但应该给你很多的乐趣.