繁体   English   中英

在树中查找节点N.

[英]Find node N in a tree

我在使用Java编写以下方法时遇到问题

int findNodeN(Node node,int n)

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

  20 10 30 1 14 25 35 

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

感谢任何帮助

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM