对于我的LeafNodeIterator类中的next()方法,我遇到了一些问题。 首先,叶子节点是二叉搜索树中无子的节点。(不确定leafnode是否是正确的英语单词...)
在构造函数中,我使用此方法将指针 p 移动到第一个leafnode:
private BladnodeIterator() // constructor
{
if(root == null) return;
firstleafnode(root);
}
private void firstleafnode(Node<T> p)
{
while(p != null)
{
if(p.left == null && p.right == null)
return;
p = nextInorder(p);
}
}
The "nextInorder(p)"-method just moves p to the next Node in Inorder-order.
我的问题当涉及到next() - 方法,它应该返回一个leafnode-value,并将p移动到下一个leafnode(如果没有更多的leafnodes,则为null),是如何编码的?无论哪种方式我尝试它我最终做错了。
如果问题或代码不清楚,我道歉。
编辑: nextinorder-method的代码:
private static <T> Node<T> nextInorder(Node<T> p)
{
if(p.right != null)
{
p = p.right;
while(p.left != null)
{
p = p.left;
}
return p;
}
while(p != null)
{
if(p.parent != null && p.parent.left == p)
{
return p.parent;
}
p = p.parent;
}
return p;
}