236. 二叉树的最近公共祖先

复制代码
https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/?envType=study-plan-v2&envId=top-interview-150
复制代码
思路:因为自己可以是自己的祖先,所以这题其实是在问哪棵子树(最小)可以同时将两个节点包含,我们需要返回该子树的根节点;因为没有重复数所以我们可以用cnt来记录以当前节点为根的子树包含这两个节点的数量,我们可以用cnt=当前节点本身是否相等+左右子树包含的数量, 就可以算出当前节点为根的子树包含这两个节点的数量,当第一次等于2的时候就代表我们找到了。
java 复制代码
public class Main {
    int cnt = 0;
    TreeNode goal = null;
    boolean flag = false;
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        method(root, p, q);
        return goal;
    }

    public int method(TreeNode node, TreeNode p, TreeNode q) {
        if (node == null) {
            return 0;
        }
        //当前节点为根的子树包含这两个节点的数量
        int cnt = ((node.val == p.val || node.val == q.val) ? 1 : 0) + method(node.left, p, q) + method(node.right, p, q);
        // 第一次等于2,我们记录一下根节点,后续不再进入该部分
        if (cnt == 2 && !flag) {
            goal = node;
            flag = true;
        }
        return cnt;
    }
}
相关推荐
数智工坊几秒前
【数据结构-树与二叉树】4.3 二叉树的存储结构
数据结构
独好紫罗兰6 分钟前
对python的再认识-基于数据结构进行-a004-列表-实用事务
开发语言·数据结构·python
山岚的运维笔记12 分钟前
SQL Server笔记 -- 第20章:TRY/CATCH
java·数据库·笔记·sql·microsoft·sqlserver
铉铉这波能秀19 分钟前
LeetCode Hot100数据结构背景知识之列表(List)Python2026新版
数据结构·leetcode·list
仟濹31 分钟前
算法打卡 day1 (2026-02-06 周四) | 算法: DFS | 1_卡码网98 可达路径 | 2_力扣797_所有可能的路径
算法·leetcode·深度优先
南极企鹅34 分钟前
springBoot项目有几个端口
java·spring boot·后端
历程里程碑35 分钟前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
清风拂山岗 明月照大江40 分钟前
Redis笔记汇总
java·redis·缓存
DeeplyMind1 小时前
第七章:数据结构大比拼
数据结构·计算机科学·少儿编程·少儿科技读物
元亓亓亓1 小时前
考研408--数据结构--day8--遍历序列&线索二叉树
数据结构·考研·408·线索二叉树