如果您有parent
存儲在每個節點中,搜索將需要O(log 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"
你的問題是什麼? –
請不要要求我們爲你做功課。 –
只需從根計數步數中找到此節點的路徑即可。 –