解题思路
- 计算两个节点到最终祖先的距离
- 根据这两个距离让两个节点来到同一高度
- 然后直接一步一步网上找公共祖先
代码
import java.util.*;
class TreeNode {
int val;
TreeNode father;
TreeNode lchild;
TreeNode rchild;
public TreeNode(int val) {
this.val = val;
}
}
public class Main {
public static TreeNode findTheirFather(TreeNode node1, TreeNode node2) {
int pathlen1 = 0, pathlen2 = 0;
TreeNode temp = node1;
while(temp.father != null) {
pathlen1++;
temp = temp.father;
}
temp = node2;
while(temp.father != null) {
pathlen2++;
temp = temp.father;
}
int pathlen11 = pathlen1, pathlen22 = pathlen2;
pathlen11 = pathlen11 - Math.min(pathlen1, pathlen2);
pathlen22 = pathlen22 - Math.min(pathlen1, pathlen2);
while(pathlen11 > 0) {
pathlen11--;
node1 = node1.father;
}
while(pathlen22 > 0) {
pathlen22--;
node2 = node2.father;
}
while(node1 != node2) {
node1 = node1.father;
node2 = node2.father;
}
return node1;
}
public static void main(String[] args) {
}
}