我需要在java中创建一个方法,递归地确定从任何给定节点到根的距离。该方法返回一个整数,显示特定节点离根的距离。节点类在下面给出
Public class Node
{
int data;
node left;
node right;
}
不允许全局变量或属性,我无法修改节点类。我查了一下,每个解决方案都告诉我修改节点类以包含父节点的节点指针。任何帮助将不胜感激,谢谢!
答案 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"