博客
关于我
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先
阅读量: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/

    你可能感兴趣的文章
    postMessage跨标签页共享数据
    查看>>
    post为什么会发送两次请求?
    查看>>
    Post表单提交TextArea的值出现转译乱码问题 - Spring MVC处理表单提交
    查看>>
    Power BI 中的 Python 可视化需要什么设置?任何特定的 matplotlib 包版本或系统设置?
    查看>>
    Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?
    查看>>
    power english (3) main text -emotion mastery - focus
    查看>>
    POWER ENGLISH (6) - MODEL
    查看>>
    power english (1) —— passion
    查看>>
    Power English (1) 原文
    查看>>
    power English (3)原文
    查看>>
    POWER ENGLISH(7)- repetition
    查看>>
    powerbi 一张表在另外一张表中出现的数量_PowerBi之初步学习笔记
    查看>>
    QGIS怎样设置简体中文以及新建可编辑的多边形的图层
    查看>>
    PowerBuilder 使用自定义事件触发键盘Enter事件
    查看>>
    PowerCreatorCMS UploadResourcePic 任意文件上传漏洞复现
    查看>>
    PowerDesigner 使用的一些技巧(转)
    查看>>
    QGIS在Windows上下载安装与建立空间数据库连接
    查看>>
    PowerDesigner165安装婆姐汉花教程
    查看>>
    PowerDesigner使用教程:设置注释、默认值属性
    查看>>
    PowerDesigner使用教程:不显示背景网格
    查看>>