您的位置:首页 > 其它

二叉树中找两个结点的最近公共祖先结点

2017-04-10 10:24 183 查看

解题思路

计算两个节点到最终祖先的距离

根据这两个距离让两个节点来到同一高度

然后直接一步一步网上找公共祖先

代码

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;

//计算node1到最终祖先的距离
TreeNode temp = node1;
while(temp.father != null) {
pathlen1++;
temp = temp.father;
}

//计算node2到最终祖先的距离
temp = node2;
while(temp.father != null) {
pathlen2++;
temp = temp.father;
}

//让node1和node2来到同一高度
int pathlen11 = pathlen1, pathlen22 = pathlen2;
//计算node1和node2需要走的距离
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) {

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐