二叉树-查找节点的第k个顺序(最小到最大)

时间:2018-12-06 00:25:01

标签: java binary-tree

在二叉树中找到节点的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;
}

很抱歉,我太草率了。我查找了许多不同的方法来实现此目的,但是对于教授给出的二叉树,它们似乎都无法正常工作。

0 个答案:

没有答案