iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP二叉树怎么搜索的最近公共父辈
  • 592
分享到

PHP二叉树怎么搜索的最近公共父辈

2023-06-20 13:06:12 592人浏览 安东尼
摘要

这篇文章主要讲解了“PHP二叉树怎么搜索的最近公共父辈”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php二叉树怎么搜索的最近公共父辈”吧!二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到

这篇文章主要讲解了“PHP二叉树怎么搜索的最近公共父辈”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“php二叉树怎么搜索的最近公共父辈”吧!

二叉搜索树的最近公共祖先

给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]

示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是 6。

示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4输出: 2解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。

解题思路

这题让求二叉搜索树的最近公共祖先,而二叉搜索树的特点就是左子树的所有节点都小于当前节点,右子树的所有节点都大于当前节点,并且每棵子树都具有上述特点,所以这题就好办了,从更节点开始遍历

如果两个节点值都小于根节点,说明他们都在根节点的左子树上,我们往左子树上找如果两个节点值都大于根节点,说明他们都在根节点的右子树上,我们往右子树上找如果一个节点值大于根节点,一个节点值小于根节点,说明他们他们一个在根节点的左子树上一个在根节点的右子树上,那么根节点就是他们的最近公共祖先节点。

代码

     class Solution {        function lowestCommonAncestor($root, $p, $q) {        //如果根节点和p,q的差相乘是正数,说明这两个差值要么都是正数要么都是负数,也就是说        //他们肯定都位于根节点的同一侧,就继续往下找        while (($root->val - $p->val) * ($root->val - $q->val) > 0)            $root = $p->val < $root->val ? $root->left : $root->right;        //如果相乘的结果是负数,说明p和q位于根节点的两侧,如果等于0,说明至少有一个就是根节点        return $root;    }}

二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉树:  root = [3,5,1,6,2,0,8,null,null,7,4]

示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1输出: 3解释: 节点 5 和节点 1 的最近公共祖先是节点 3。

示例 2:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4输出: 5解释: 节点 5 和节点 4 的最近公共祖先是节点 5。因为根据定义最近公共祖先节点可以为节点本身。

解题思路

(递归) O(n)

当我们用递归去做这个题时不要被题目误导,应该要明确一点 这个函数的功能有三个:给定两个节点 pp 和 qq

如果 pp 和 qq 都存在,则返回它们的公共祖先; 如果只存在一个,则返回存在的一个; 如果 pp 和 qq 都不存在,则返回NULL 本题说给定的两个节点都存在,那自然还是能用上面的函数来解决

具体思路: (1) 如果当前结点 rootroot 等于 NULL,则直接返回 NULL (2) 如果 rootroot 等于 pp 或者 qq ,那这棵树一定返回 pp 或者 qq (3) 然后递归左右子树,因为是递归,使用函数后可认为左右子树已经算出结果,用 leftleft 和 rightright 表示 (4) 此时若leftleft为空,那最终结果只要看 rightright;若 rightright 为空,那最终结果只要看 leftleft (5) 如果 leftleft 和 rightright 都非空,因为只给了 pp 和 qq 两个结点,都非空,说明一边一个,因此 rootroot 是他们的最近公共祖先 (6) 如果 leftleft 和 rightright 都为空,则返回空(其实已经包含在前面的情况中了)

时间复杂度是 O(n):每个结点最多遍历一次或用主定理,空间复杂度是 O(n):需要系统栈空间

代码

 class Solution {        function lowestCommonAncestor($root, $p, $q) {        if ($root == null || $root == $p || $root == $q)            return $root;        $left = $this->lowestCommonAncestor($root->left, $p, $q);        $right = $this->lowestCommonAncestor($root->right, $p, $q);                //如果left为空,说明这两个节点在cur结点的右子树上,我们只需要返回右子树查找的结果即可        if ($left == null)            return $right;        //同上        if ($right == null)            return $left;        //如果left和right都不为空,说明这两个节点一个在cur的左子树上一个在cur的右子树上,        //我们只需要返回cur结点即可。        if ($left && $right) {            return $root;        }        return null;    }}

感谢各位的阅读,以上就是“PHP二叉树怎么搜索的最近公共父辈”的内容了,经过本文的学习后,相信大家对PHP二叉树怎么搜索的最近公共父辈这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: PHP二叉树怎么搜索的最近公共父辈

本文链接: https://www.lsjlt.com/news/297388.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • PHP二叉树怎么搜索的最近公共父辈
    这篇文章主要讲解了“PHP二叉树怎么搜索的最近公共父辈”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP二叉树怎么搜索的最近公共父辈”吧!二叉搜索树的最近公共祖先给定一个二叉搜索树, 找到...
    99+
    2023-06-20
  • Java怎么找二叉树的最近公共祖先
    本篇内容主要讲解“Java怎么找二叉树的最近公共祖先”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么找二叉树的最近公共祖先”吧!思路一:先假设这棵树是二叉搜索树首先我们补充说明一下什么...
    99+
    2023-06-30
  • Java求解二叉树的最近公共祖先实例代码
    一、题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是...
    99+
    2024-04-02
  • Java求解二叉树中最近公共祖先的示例分析
    小编给大家分享一下Java求解二叉树中最近公共祖先的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、题目给定一个二叉树, 找到该树中两个指定节点的最近公...
    99+
    2023-06-15
  • Java 讲解两种找二叉树的最近公共祖先的方法
    目录思路一:先假设这棵树是二叉搜索树思路二:假设该树是用孩子双亲表示法思路一:先假设这棵树是二叉搜索树 首先我们补充说明一下什么是二叉搜索树: 在二叉搜索树中,对于每一个节点来说,他...
    99+
    2024-04-02
  • C++怎么把二叉搜索树转换累加树
    今天小编给大家分享一下C++怎么把二叉搜索树转换累加树的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。把二叉搜索树转换为累加树...
    99+
    2023-07-04
  • 怎么利用JavaScript实现二叉搜索树
    这篇文章给大家分享的是有关怎么利用JavaScript实现二叉搜索树的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。计算机科学中最常用和讨论最多的数据结构之一是二叉搜索树。这通常是引入的第一个具有非线性插入算法的数...
    99+
    2023-06-14
  • 使用JavaScript怎么实现一个二叉搜索树
    今天就跟大家聊聊有关使用JavaScript怎么实现一个二叉搜索树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • C++ AVLTree高度平衡的二叉搜索树怎么实现
    这篇“C++ AVLTree高度平衡的二叉搜索树怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“C++&nb...
    99+
    2023-07-05
  • Java怎么实现二叉搜索树的插入、删除功能
    这篇文章给大家介绍Java怎么实现二叉搜索树的插入、删除功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的特点有哪些Java的特点有哪些 1.Java语言作为静态面向对象编程语言的代表,实现了面向对象理论,允...
    99+
    2023-06-26
  • C++中怎么利用LeetCode实现二叉搜索树迭代器
    C++中怎么利用LeetCode实现二叉搜索树迭代器,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。[LeetCode] 173.Binary Search Tr...
    99+
    2023-06-20
  • C++怎么求二叉树的最小深度
    本篇内容介绍了“C++怎么求二叉树的最小深度”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!二叉树的最小深度Given a binary tr...
    99+
    2023-06-20
  • C++怎么实现二叉树的最大深度
    本文小编为大家详细介绍“C++怎么实现二叉树的最大深度”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++怎么实现二叉树的最大深度”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。二叉树的最大深度Example:G...
    99+
    2023-06-19
  • C++怎么实现二叉树的最小深度
    今天小编给大家分享一下C++怎么实现二叉树的最小深度的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。二叉树的最小深度Examp...
    99+
    2023-06-19
  • C++怎么求二叉树的最大路径和
    本篇内容主要讲解“C++怎么求二叉树的最大路径和”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C++怎么求二叉树的最大路径和”吧!求二叉树的最大路径和Given a non-empty...
    99+
    2023-06-20
  • 怎么用C++求出二叉树的最大深度
    这篇文章主要介绍“怎么用C++求出二叉树的最大深度”,在日常操作中,相信很多人在怎么用C++求出二叉树的最大深度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用C++求出二叉树的最大深度”的疑惑有所帮助!...
    99+
    2023-06-20
  • 怎么使用Java递归推出给定节点数的所有形状二叉搜索树
    这篇文章主要讲解了“怎么使用Java递归推出给定节点数的所有形状二叉搜索树”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用Java递归推出给定节点数的所有形状二叉搜索树”吧!题目:给定...
    99+
    2023-06-02
  • 怎么利用go语言实现查找二叉树中的最大宽度
    这篇文章主要介绍“怎么利用go语言实现查找二叉树中的最大宽度”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么利用go语言实现查找二叉树中的最大宽度”文章能帮助大家解决问题。介绍这道题是这样的,有一...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作