[英]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.