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;
    }
}
相关推荐
To_OC3 小时前
LC 51 N 皇后:我以为难的是回溯,结果栽在了对角线下标
javascript·算法·leetcode
腻害兔3 小时前
【若依项目-产品经理视角】深度拆解 RuoYi-Vue-Pro 商城模块:从商品管理到交易引擎,50 张表撑起一整套电商系统
java·大数据·vue.js·产品经理·ai编程
码智社4 小时前
AES加密原理详解及Java实现加解密实战
java·开发语言
萧瑟余晖5 小时前
JDK 26 新特性详解
java·开发语言
马优晨5 小时前
Freemarker 完整讲解(后端 Java 模板引擎)
java·开发语言·freemarker·freemarker 完整讲解·freemarker模板引擎
维天说8 小时前
CLI-Switch 2026年3月版历史设计:Hook、TTY 隔离与 JSON 状态
java·服务器·json
Zane19948 小时前
并发 vs 并行:别再傻傻分不清了,一文讲透 Java 并发编程的第一课
java·后端
噢,我明白了9 小时前
java中Excel的导入和导出(EasyExcel)
java·开发语言·excel
吠品9 小时前
Zabbix Web界面误报Server未运行的排查与解决
java·服务器·数据库
啊湘9 小时前
天气查询API接口 按月Token鉴权 实时天气 物联网可用 文档齐全
java·后端·struts