标签:right TreeNode lintcode578 祖先 III LCA return null root
最近公共祖先 III
题目:最近公共祖先 III
给一棵二叉树和二叉树中的两个节点,找到这两个节点的最近公共祖先LCA。
返回 null 如果两个节点在这棵树上不存在最近公共祖先的话。
注意:
这两个节点未必都在这棵树上出现。
每个节点的值都不同
示例:
输入:
{4, 3, 7, #, #, 5, 6}
3 5
5 6
6 7
5 8
输出:
4
7
7
null
解释:
4
/ \
3 7
/ \
5 6
LCA(3, 5) = 4
LCA(5, 6) = 7
LCA(6, 7) = 7
LCA(5, 8) = null
题解:分治法
- 先DFS二叉树,判断p和q是否存在,不存在返回null
- 返回p和q的最近公共祖先
public class Solution {
Map<TreeNode, TreeNode> map;
public void dfs(TreeNode father, TreeNode root)
{
if(root==null) return;
map.put(root, father);
dfs(root, root.left);
dfs(root, root.right);
}
public TreeNode LCA(TreeNode root, TreeNode p, TreeNode q)
{
if(root==null|| root==p || root==q) return root;
TreeNode left=LCA(root.left, p, q);
TreeNode right=LCA(root.right, p, q);
if(left==null) return right;
if(right==null) return left;
return root;
}
public TreeNode lowestCommonAncestor3(TreeNode root, TreeNode p, TreeNode q) {
map = new HashMap<>();
dfs(root, root);
if(!map.containsKey(p) || !map.containsKey(q)) return null;
return LCA(root, p, q);
}
}
标签:right,TreeNode,lintcode578,祖先,III,LCA,return,null,root 来源: https://www.cnblogs.com/greengages/p/15757987.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。