二叉树两个节点最近祖先

    已知二叉树的两个节点,要求找到二者最近的祖先。

    先遍历其中一个节点,保存它到根节点的所有节点,再看另外一个节点的祖先路径与之重叠部分。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

* 寻找两个节点最近的祖先
*
* @param node1
* @param node2
* @return
*/
public static TreeNode searchNearestAncester(TreeNode node1, TreeNode node2) {
List list = new ArrayList();
list.add(node1);
if (node1.parent != null) {
while (node1.parent != null) {
list.add(node1.parent);
node1 = node1.parent;
}
}
//
if (list.indexOf(node2) != -1)
return node2;
if (node2!= null) {
while (node2.parent!= null) {
node2 = node2.parent;
if (list.indexOf(node2) != -1)
return node2;
}
}
return null;
}