在树中查找节点N.

时间:2011-03-16 22:24:00

标签: java algorithm tree binary-tree binary-search

我在使用Java编写以下方法时遇到了麻烦

  

int findNodeN(Node node,int n)

例如,如果二进制搜索树构造如下:

        20
   10       30    
 1   14   25   35

如果n = 0则返回节点1,如果n = 1则返回节点10,依此类推(即inOrder遍历)

感谢任何帮助

2 个答案:

答案 0 :(得分:2)

最简单的实现是将计数器变量设置为零。按照通常的顺序走树。当你去正确的孩子 - 增加柜台,当你去父母,你在左边的孩子 - 增加柜台。当计数器等于N返回当前顶点时。

答案 1 :(得分:0)

这是我的版本,它与您的需求略有不同,但它可以起作用:

public E findElement(E element)
{
    TreeNode<E> current = root;

    while (current != null)
    {
        if ( element.compareTo(current.getElement() ) == 0)   //If found
        {
            return current.getElement();
        } 
        else if( element.compareTo(current.getElement() ) < 0)    //If element is less
        {
            current = current.getLeftChild();               //Try the left child
        } 
        else                                                //If element is greater
        {
            current = current.getRightChild();             //Try the right child
        }
    }

//not found
return null;

}

非常确定你可以使用递归来获得更简洁的代码,但这可以完成工作。

编辑:好的,尝试这样的事情:

public int findNodeN(Node node, int n, int callNumber) //Call initially with findNodeN(tree.getRoot(), n, 0)
{
    if (node.hasLeft())
        findNodeN(node.getLeftChild(), n, callNumber);
    if (callNumber == n)                     
         return node.getElement();
    else
         callNumber++;
    if (node.hasRight())
        printTreeInOrder(node.getRightChild(), n, callNumber);

}

未经测试。 Calum