基本思路是对需要查找的节点赋权值为1,其它节点权值为0.那么只要找到一个节点的左右权值都不为1的点就是需要查找的公共父节点。
这种方法可以推广到查到n个节点的公共父节点,对每一个需要查找的节点赋值为1即可
static class Node {
String value;
Node left;
Node right;
}
static Node parent;
public static int findParent(Node root, Node first, Node second) {
if (root == null || parent != null) {
// Accelerate check
return 0;
}
int value = 0;
if (root == first || root == second) {
// find the node
value = 1;
}
value += findParent(root.left, first, second);
value += findParent(root.right, first, second);
if (value == 2) {
// find the common parent of the first and second node
parent = root;
value = 0;
}
//
return value;
}
这种方法可以推广到查到n个节点的公共父节点,对每一个需要查找的节点赋值为1即可