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

    你可能感兴趣的文章
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>
    nodejs中express的使用
    查看>>
    Nodejs中的fs模块的使用
    查看>>
    NodeJS使用淘宝npm镜像站的各种姿势
    查看>>
    nodejs包管理工具对比:npm、Yarn、cnpm、npx
    查看>>
    NodeJs单元测试之 API性能测试
    查看>>
    nodejs图片转换字节保存
    查看>>
    nodejs在Liunx上的部署生产方式-PM2
    查看>>
    nodejs字符与字节之间的转换
    查看>>
    NodeJs学习笔记001--npm换源
    查看>>
    NodeJs学习笔记002--npm常用命令详解
    查看>>
    nodejs学习笔记一——nodejs安装
    查看>>
    NodeJS实现跨域的方法( 4种 )
    查看>>
    nodejs封装http请求
    查看>>
    nodejs常用组件
    查看>>
    nodejs开发公众号报错 40164,白名单配置找不到,竟然是这个原因
    查看>>
    Nodejs异步回调的处理方法总结
    查看>>
    NodeJS报错 Fatal error: ENOSPC: System limit for number of file watchers reached, watch ‘...path...‘
    查看>>
    Nodejs教程09:实现一个带接口请求的简单服务器
    查看>>
    nodejs服务端实现post请求
    查看>>