博客
关于我
leetcode题解236-二叉树的最近公共祖先
阅读量:801 次
发布时间:2023-01-31

本文共 1694 字,大约阅读时间需要 5 分钟。

二叉树最近公共祖先的问题

在本文中,我们将探讨如何有效地找到二叉树中两个指定节点的最近公共祖先(LCA)。最近公共祖先的定义是两个指定节点的共同祖先,并且是可能的最深节点,这可能包括其中一个节点本身。

问题分析

给定一个二叉树,其中包含节点p和q,我们需要找到它们的最近公共祖先。根据题意,最近公共祖先可以是p或q本身,也可以是它们共享的最高祖先节点。

解题思路

我们采用递归法来解决这个问题。这种方法适用于层次遍历结构,能够有效地探索节点的路径。以下是详细的步骤:

  • 终止条件

    • 如果当前节点为空,返回null。
    • 如果当前节点是p或q,直接返回该节点。
  • 递归左、右子树

    • 递归左子树,获取左子树的LCA。
    • 递归右子树,获取右子树的LCA。
  • 处理返回值

    • 如果左子树返回null,说明p或q不在左子树中,直接返回右子树的结果。
    • 如果右子树返回null,同理,直接返回左子树的结果。
    • 如果两者都返回非null,则说明p和q分别位于根节点的左右子树中,根节点即为最近公共祖先。
  • 代码实现

    class Solution {   public TreeNode searchAncester(TreeNode root, TreeNode p, TreeNode q) {       if (root == null) {           return null;       }       if (root == p || root == q) {           return root;       } else {           TreeNode left = searchAncester(root.left, p, q);           TreeNode right = searchAncester(root.right, p, q);                      if (left == null) {               return right;           } else if (right == null) {               return left;           } else {               return root;           }       }   }      public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {       if (root == null) {           return null;       }       return searchAncester(root, p, q);   }}

    功能解释

    • searchAncester方法:这是递归函数,用于在树中搜索节点p和q,找到它们在根节点下的最近公共祖先。

      • 终止条件:检查当前节点是否为空或是否是目标节点p或q。
      • 递归左、右子树:分别递归左子树和右子树,获取各自的LCA。
      • 处理结果:根据左、右子树的LCA结果,确定整个树的LCA。
    • lowestCommonAncestor方法:这是入口函数,负责初始化树的根节点,并调用searchAncester方法进行搜索,返回树中节点p和q的最近公共祖先。

    示例验证

  • 示例1

    • 树:root = [3,5,1,6,2,0,8,null,null,7,4]
    • p = 5, q = 1
    • 输出:3(根节点3是5和1的最近公共祖先)
  • 示例2

    • 树:同样为root = [3,5,1,6,2,0,8,null,null,7,4]
    • p = 5, q = 4
    • 输出:5(5是两个节点的LCA)
  • 示例3

    • 树:root = [1,2]
    • p = 1, q = 2
    • 输出:1(1是两个节点的LCA)
  • 通过这些示例,可以验证我们的代码能够正确地找到较低层次或较高层次的最近公共祖先。代码逻辑严谨,RecursiveDepth较小,适用于较小规模的树,性能优越。

    转载地址:http://wegyk.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置参数中文说明
    查看>>
    Nginx配置后台网关映射路径
    查看>>
    nginx配置域名和ip同时访问、开放多端口
    查看>>
    Nginx配置多个不同端口服务共用80端口
    查看>>
    Nginx配置好ssl,但$_SERVER[‘HTTPS‘]取不到值
    查看>>
    Nginx配置如何一键生成
    查看>>
    Nginx配置实例-动静分离实例:搭建静态资源服务器
    查看>>
    Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    Nginx配置自带的stub状态实现活动监控指标
    查看>>
    nginx配置详解、端口重定向和504
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    Nginx配置限流,技能拉满!
    查看>>
    Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
    查看>>
    Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
    查看>>
    Nginx:NginxConfig可视化配置工具安装
    查看>>
    ngModelController
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    ngrok内网穿透可以实现资源共享吗?快解析更加简洁
    查看>>