在二叉树中找到节点的k阶的好方法是什么?
到目前为止,这是我所拥有的,我似乎没有尝试按照我认为的方式工作。
他的测试程序调用的给定方法是findByOrder(int k),最小元素的索引为0,最大元素的索引为root.size()-1。因此k = 1将返回第二个最小元素树的
这是我目前无法使用的东西,启动方法是findByOrder(int k),另外两个是我尝试实现的辅助方法。
public Node<T> findFirst(Node<T> r) {
while(r.left != null) {
if(r.left != null);
r = r.left;
}
return r;
}
public Node<T> findOrder(Node<T> r, Node<T> last, int k) {
if(r.left != null && r.right != null) {
if(r.left != last || r.right != last) {
findOrder(r.left, last, k);
; }
if(r.left == last) {
if(r.right != null) {
return r.right;
} else {
return r;
}
}
}
return r;
}
/**
* Return the kth indexed element according to the Comparable sorted order of
* the tree. The leftmost node has index 0 and the rightmost node has index
* size() - 1.
*
* @param k
* index
* @return element, or null if k is out of range.
*/
public T findByOrder(int k) {
int count = 0;
Node<T> oNode = findFirst(root);
if(k < 0 || k > (root.size() - 1)) return null;
while(count != k) {
count = count + 1;
findOrder(root, oNode, k);
}
return oNode.data;
}
很抱歉,我太草率了。我查找了许多不同的方法来实现此目的,但是对于教授给出的二叉树,它们似乎都无法正常工作。