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

    你可能感兴趣的文章
    opencv6-调整图像亮度和对比度
    查看>>
    opencv7-绘制形状和文字
    查看>>
    opencv8-图像模糊
    查看>>
    opencv9-膨胀和腐蚀
    查看>>
    OpenCV_ cv2.imshow()
    查看>>
    opencv_core.dir/objects.a(vs_version.rc.obj)‘ is incompatible with i386:x86-64 output
    查看>>
    opencv——图像缩放1(resize)
    查看>>
    opencv——最简单的视频读取
    查看>>
    Opencv——模块介绍
    查看>>
    OpenCV与AI深度学习 | 2024年AI初学者需要掌握的热门技能有哪些?
    查看>>
    OpenCV与AI深度学习 | CIB-SE-YOLOv8: 优化的YOLOv8, 用于施工现场的安全设备实时检测 !
    查看>>
    OpenCV与AI深度学习 | CoTracker3:用于卓越点跟踪的最新 AI 模型
    查看>>
    OpenCV与AI深度学习 | OpenCV中八种不同的目标追踪算法
    查看>>
    OpenCV与AI深度学习 | OpenCV图像拼接--Stitching detailed使用与参数介绍
    查看>>
    OpenCV与AI深度学习 | OpenCV如何读取仪表中的指针刻度
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(一) :直接拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(三):基于特征匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(二) :基于模板匹配拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV常用图像拼接方法(四):基于Stitcher类拼接
    查看>>
    OpenCV与AI深度学习 | OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测(建议收藏!)
    查看>>