使用迭代器在二叉搜索树中获取下一个leafnode

时间:2015-11-05 16:23:12

标签: java iterator nodes next

对于我的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;
  }

0 个答案:

没有答案