236. 二叉树的最近公共祖先 --力扣 --JAVA

题目

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。"

解题思路

  1. 利用Map存储当前节点和对应的子节点;
  2. 利用递归遍历整棵树,将数据存放到Map当中;
  3. 遍历Map获取最近的公共祖先。

代码展示

java 复制代码
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;
    }
}
相关推荐
缘友一世29 分钟前
从线性回归到逻辑回归
算法·逻辑回归·线性回归
前端_学习之路1 小时前
javaScript--数据结构和算法
javascript·数据结构·算法
weixin_428498492 小时前
使用HYPRE库并行装配IJ稀疏矩阵指南: 矩阵预分配和重复利用
算法·矩阵
雾削木3 小时前
mAh 与 Wh:电量单位的深度解析
开发语言·c++·单片机·嵌入式硬件·算法·电脑
__lost3 小时前
小球在摆线上下落的物理过程MATLAB代码
开发语言·算法·matlab
8RTHT4 小时前
数据结构(七)---链式栈
数据结构
mit6.8245 小时前
[Lc_week] 447 | 155 | Q1 | hash | pair {}调用
算法·leetcode·哈希算法·散列表
Fency咖啡6 小时前
《代码整洁之道》第9章 单元测试 - 笔记
数据结构·b树
2501_906314326 小时前
优化无头浏览器流量:使用Puppeteer进行高效数据抓取的成本降低策略
开发语言·数据结构·数据仓库
C182981825756 小时前
项目中数据结构为什么用数组,不用List
数据结构