博客
关于我
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
阅读量:546 次
发布时间:2019-03-08

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

为了找到二叉树中两个指定节点的最近公共祖先,我们可以采用递归的方法,分别检查左右子树,直到找到共同的祖先节点。以下是详细的实现步骤:

  • 检查当前节点是否为空:如果根节点为空,直接返回null。
  • 检查当前节点是否为目标节点:如果当前节点是p或q中的一个,直接返回该节点。
  • 递归查找左子树:分别查找p和q在左子树中的最近公共祖先。
  • 递归查找右子树:分别查找p和q在右子树中的最近公共祖先。
  • 判断返回结果
    • 如果左子树和右子树都有公共祖先,返回根节点。
    • 如果只有左子树有公共祖先,返回左子树的结果。
    • 如果只有右子树有公共祖先,返回右子树的结果。
    • 如果左右子树都为空,返回null。
  • 以下是基于上述逻辑的实现代码:

    class Solution5 {    public TreeNode2 lowestCommonAncestor(TreeNode2 root, TreeNode2 p, TreeNode2 q) {        if (root == null) {            return null;        }        if (root == p || root == q) {            return root;        }        TreeNode2 leftP = lowestCommonAncestor(root.left, p, q);        TreeNode2 leftQ = lowestCommonAncestor(root.left, p, q);        TreeNode2 rightP = lowestCommonAncestor(root.right, p, q);        TreeNode2 rightQ = lowestCommonAncestor(root.right, p, q);        if (leftP != null && rightQ != null) {            return root;        } else if (leftP != null) {            return leftP;        } else if (rightQ != null) {            return rightQ;        } else {            return null;        }    }}

    步骤解释:

    • 检查当前节点是否为空:如果根节点为空,调用函数返回null。
    • 检查当前节点是否为目标节点:如果当前节点是p或q,直接返回当前节点作为最近公共祖先。
    • 递归查找左子树:分别从左子树中查找p和q的最近公共祖先。
    • 递归查找右子树:分别从右子树中查找p和q的最近公共祖先。
    • 判断返回结果
      • 如果左子树和右子树都有结果,说明最近公共祖先在根节点。
      • 如果只有左子树有结果,返回左子树的结果。
      • 如果只有右子树有结果,返回右子树的结果。
      • 如果左右子树都没有结果,返回null。

    这种方法通过递归分别检查左右子树,确保了找到最近公共祖先的准确性和效率。

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

    你可能感兴趣的文章
    NSOperation基本操作
    查看>>
    NSRange 范围
    查看>>
    NSSet集合 无序的 不能重复的
    查看>>
    NSURLSession下载和断点续传
    查看>>
    NSUserdefault读书笔记
    查看>>
    NS图绘制工具推荐
    查看>>
    NT AUTHORITY\NETWORK SERVICE 权限问题
    查看>>
    NT symbols are incorrect, please fix symbols
    查看>>
    ntelliJ IDEA 报错:找不到包或者找不到符号
    查看>>
    NTFS文件权限管理实战
    查看>>
    ntko web firefox跨浏览器插件_深度比较:2019年6个最好的跨浏览器测试工具
    查看>>
    ntko文件存取错误_苹果推送 macOS 10.15.4:iCloud 云盘文件夹共享终于来了
    查看>>
    ntp server 用法小结
    查看>>
    ntpdate 通过外网同步时间
    查看>>
    ntpdate同步配置文件调整详解
    查看>>
    NTPD使用/etc/ntp.conf配置时钟同步详解
    查看>>
    NTP及Chrony时间同步服务设置
    查看>>
    NTP服务器
    查看>>
    NTP配置
    查看>>
    NUC1077 Humble Numbers【数学计算+打表】
    查看>>