二进制搜索树递归返回root

时间:2015-04-27 14:29:44

标签: java recursion binary-search-tree

我需要在java中创建一个方法,递归地确定从任何给定节点到根的距离。该方法返回一个整数,显示特定节点离根的距离。节点类在下面给出

Public class Node
{
int data;
node left;
node right;
}

不允许全局变量或属性,我无法修改节点类。我查了一下,每个解决方案都告诉我修改节点类以包含父节点的节点指针。任何帮助将不胜感激,谢谢!

1 个答案:

答案 0 :(得分:0)

如果您在每个节点中存储了parent,则搜索将需要O(日志N)操作(如果是平衡树) - 您只需遍历父母并计算步骤直到parent == null这意味着根节点。

但是如果没有parent字段,则需要从根开始递归遍历整个树,查找给定节点。它需要O(N)操作:

/** Returns the distance between "n" and "current" plus "step" 
/*  or -1 if "n" not found                                     */
int distance(Node n, Node current, int step) {
    int res = -1;
    if (n == current)  // node found
       return step;                     
    if (current.left == null && current.right == null)  // leaf node
       return -1;
    if (current.left != null)   // search in left subtree
       res = distance(n, current.left, step + 1);
    if (res > 0) 
       return res;
    if (current.right != null)  // search in right subtree
       res = distance(n, current.right, step + 1);
    return res;
}

//....
Node root;
Node given;
int dist = distance(given, root, 0);  // distance between "root" and "given"