二叉树中找两个结点的最近公共祖先结点
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) { } }
相关文章推荐
- 二叉树中找两个结点的最近公共祖先结点
- 二叉树中找两个结点的最近的公共祖先结点
- 二叉树中找两个结点的最近的公共祖先结点
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 【数据结构】求二叉树中两个结点最近的公共祖先
- 二叉树------寻找二叉树中两个结点的最近公共祖先
- 求二叉树中两个节点的最近公共祖先结点
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 求二叉树中两个结点的最近公共祖先
- 二叉树的最近公共祖先、两个最远节点、第K层结点个数、出现次数超过一半的元素
- 二叉树中两个结点最近的公共祖先汇总
- 设计算法查找二叉树的两个结点最近公共祖先(LCA)
- 寻找二叉树中两个节点的最近的公共祖先
- 求一颗不含指向父节点指针的普通树中任意两个结点的最近公共祖先(O(N*N) 和 O(N) 算法)
- 二叉树中两个节点的最近公共祖先节点
- 题目:在二叉树中给出两个已知结点,求这两个结点的最低公共祖先
- 二叉树中找到两个节点的最近公共祖先
- 在二叉树中查找两个节点的最近的公共祖先节点(无回溯指针)(NCA--nearest common ancestor)
- 求二叉树中两个节点的最近公共祖先