树中比s大的最小元素

时间:2017-12-31 15:30:42

标签: java tree binary-search-tree

如果我想在树中找到比元素x大的最小元素,那么这是一种正确的方法吗?

class Node {
   int data;
   Node left, right;
}

Node root;

public Integer successorOf(int x) {
    return successorOf(x, root);
}

private Integer successorOf(int x, Node n) {
    if (n == null) {
        return null;
    }
    if (x < n.data) {
        Integer res = successorOf(x, n.left);
        if (res == null)
            res = n.data;
        return res;
    } else {
        return successorOf(x, n.right);
    }
}

我觉得这个解决方案不会检查整棵树。

非常感谢帮助!

2 个答案:

答案 0 :(得分:0)

如果价值不在左边,那就不对了。也许父亲本身就是正确的。想想一个父亲的数据= 6,他的左子数据= 4而他的右数据数据= 10.ContinorOf(5)应该返回父亲。

private Integer successorOf(int x, Node n) {
   if(n==null)
       return null;
   if(x < node.data){
     if(node.left!= null and node.left.data > x)
        return successorOf(x, node.left);
     else                    
         return node.data;
    }
   else               //x >= n.data
      return successorOf(x, node.right);

答案 1 :(得分:0)

您可以使用inorder遍历来按升序获取元素,如果找到大于所需元素的元素,则可以找到答案

Course.find(<course_id>).training_framework