236. 二叉树的最近公共祖先 --力扣 --JAVA
2023-12-14 12:03:55
题目
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
解题思路
- 利用Map存储当前节点和对应的子节点;
- 利用递归遍历整棵树,将数据存放到Map当中;
- 遍历Map获取最近的公共祖先。
代码展示
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
Map<TreeNode, List<Integer>> data = new HashMap<>();
dfs(root,data);
int min = Integer.MAX_VALUE;
TreeNode ans = null;
for (TreeNode treeNode : data.keySet()){
List<Integer> list = data.get(treeNode);
int size = list.size();
if(list.contains(p.val) && list.contains(q.val)){
if(min > size){
min = size;
ans = treeNode;
}
}
}
return ans;
}
public List<Integer> dfs(TreeNode root, Map<TreeNode, List<Integer>> data){
if(root == null){
return new ArrayList<>();
}
List<Integer> store = new ArrayList<>();
store.add(root.val);
store.addAll(dfs(root.left,data));
store.addAll(dfs(root.right,data));
data.putIfAbsent(root, store);
return store;
}
}
文章来源:https://blog.csdn.net/qq_45794129/article/details/134989101
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!