我在使用Java编写以下方法时遇到了麻烦
int findNodeN(Node node,int n)
例如,如果二进制搜索树构造如下:
20 10 30 1 14 25 35
如果n = 0则返回节点1,如果n = 1则返回节点10,依此类推(即inOrder遍历)
感谢任何帮助
答案 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