当前位置: 首页 > news >正文

闵行区 网站制作网站制作带优化

闵行区 网站制作,网站制作带优化,网站正能量晚上不用下载进入免费,百度推广点击收费标准一、题目内容 题目要求找到给定二叉树中两个指定节点的最近公共祖先。最近公共祖先的定义为:对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先…

一、题目内容

题目要求找到给定二叉树中两个指定节点的最近公共祖先。最近公共祖先的定义为:对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。

二、题目分析

输入和输出

  • 输入:一个二叉树的根节点 root,以及两个指定节点 p 和 q。

  • 输出:一个二叉树节点,表示 p 和 q 的最近公共祖先。

递归函数 lowestCommonAncestor 的逻辑

  • 基本情况:

    • 如果当前节点为空(root == NULL),返回 NULL。

    • 如果当前节点是 p 或 q,返回当前节点。

  • 递归检查左子树和右子树:

    • 递归调用 lowestCommonAncestor(root->left, p, q),检查左子树中是否存在 p 或 q。

    • 递归调用 lowestCommonAncestor(root->right, p, q),检查右子树中是否存在 p 或 q。

  • 返回结果:

    • 如果左子树和右子树的返回值都不为空,说明 p 和 q 分别在当前节点的左子树和右子树中,当前节点即为最近公共祖先。

    • 如果左子树的返回值不为空,右子树的返回值为空,说明 p 和 q 都在左子树中,返回左子树的返回值。

    • 如果左子树的返回值为空,右子树的返回值不为空,说明 p 和 q 都在右子树中,返回右子树的返回值。

    • 如果左子树和右子树的返回值都为空,说明当前子树中不存在 p 和 q,返回 NULL。

三、解题要点

1. 二叉树的定义

二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,通常分为左子节点和右子节点。二叉树的结构使得递归方法成为解决许多问题的自然选择。

2. 最近公共祖先的性质

最近公共祖先(LCA)是指在二叉树中,两个节点 p 和 q 的最近公共祖先 x 满足以下条件:

  1. x 是 p 和 q 的祖先(一个节点也可以是它自己的祖先)。

  2. x 的深度尽可能大,即 x 是最接近 p 和 q 的祖先。

3.解题思路

  1. 基本情况

    • 如果当前节点为空(root == NULL),返回 NULL。因为空树中不存在任何节点,自然也没有公共祖先。

    • 如果当前节点是 p 或 q(root == p || root == q),返回当前节点。因为当前节点本身就是 p 或 q,它可能是最近公共祖先,或者至少是 p 或 q 的祖先。

  2. 递归检查左子树和右子树

    • 递归调用 lowestCommonAncestor(root->left, p, q),检查左子树中是否存在 p 或 q。

    • 递归调用 lowestCommonAncestor(root->right, p, q),检查右子树中是否存在 p 或 q。

  3. 返回结果

    • 如果左子树的返回值不为空,且右子树的返回值也不为空(left != NULL && right != NULL),说明 p 和 q 分别在当前节点的左子树和右子树中,当前节点即为最近公共祖先,返回当前节点。

    • 如果左子树的返回值不为空,但右子树的返回值为空(left != NULL && right == NULL),说明 p 和 q 都在左子树中,返回左子树的返回值。

    • 如果左子树的返回值为空,但右子树的返回值不为空(left == NULL && right != NULL),说明 p 和 q 都在右子树中,返回右子树的返回值。

    • 如果左子树和右子树的返回值都为空(left == NULL && right == NULL),说明当前子树中不存在 p 和 q,返回 NULL

    • 如果左子树或右子树的递归调用返回了非空值,说明在该子树中找到了 p 或 q,或者找到了它们的公共祖先。

    • 如果左子树和右子树的递归调用都返回了非空值,说明当前节点是 p 和 q 的最近公共祖先。

四、代码解答

class Solution {
public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {// 如果当前节点为空,返回 NULLif (root == NULL) return root;// 如果当前节点是 p 或 q,返回当前节点if (root == q || root == p) return root;// 递归检查左子树TreeNode* left = lowestCommonAncestor(root->left, p, q);// 递归检查右子树TreeNode* right = lowestCommonAncestor(root->right, p, q);// 如果左子树和右子树的返回值都不为空,当前节点即为最近公共祖先if (left != NULL && right != NULL) {return root;}// 如果左子树的返回值不为空,右子树的返回值为空,返回左子树的返回值if (left != NULL && right == NULL) {return left;}// 如果左子树的返回值为空,右子树的返回值不为空,返回右子树的返回值if (left == NULL && right != NULL) {return right;}// 如果左子树和右子树的返回值都为空,返回 NULLreturn NULL;}
};

详细注释

  • 成员函数 lowestCommonAncestor:主函数,用于递归查找两个指定节点的最近公共祖先。

  • 递归函数 lowestCommonAncestor

    • 基本情况:如果当前节点为空,返回 NULL。

    • 递归检查左子树:递归调用 lowestCommonAncestor(root->left, p, q),检查左子树中是否存在 p 或 q。

    • 递归检查右子树:递归调用 lowestCommonAncestor(root->right, p, q),检查右子树中是否存在 p 或 q。

    • 返回结果:根据左子树和右子树的返回值判断当前节点是否为最近公共祖先。

回溯和递归的详细解释

  • 递归:递归是一种函数调用自身的方法,用于解决复杂问题。在本题中,递归用于逐层检查每个节点是否为 p 或 q 的祖先。

  • 终止条件:递归的终止条件是当前节点为空。

  • 回溯:在递归调用返回后,通过返回值恢复到当前节点的状态,确保每次递归返回后,状态正确,不会影响后续的递归调用。

http://www.dtcms.com/a/408671.html

相关文章:

  • 如何做网站menu菜单wordpress主题 cms
  • h5网站建设功能计划表肇庆网站开发哪家专业
  • 外贸网站faq湖南建设监理报名网站
  • 用vs2012做asp网站大庆网站建设公司
  • 大型门户网站wordpress媒体主题
  • 自己编写代码建设微网站义乌网络营销
  • 怎么创立自己的网站广州新公司网站建设
  • 可商用的免费素材网站wordpress 数据库导入数据库文件
  • 网站图解图片是用什么软件做的软件外包价格一般多少
  • 个人做商机网站如何盈利专业手机网站建设推荐
  • 怎么做无损mp3下载网站网址大全2345qiren
  • 网站文章优化怎么做网站推广意识薄弱
  • 高校图书馆网站的建设方案做美食软件视频网站有哪些
  • 制作微信网站模板php网站开发最新需求
  • 湖北省平安建设网站建设网站需要做的工作
  • 申请好域名后 怎么做网站大学网站建设论文
  • 青岛网站制作工具设计wordpress页面模板下载
  • 沈阳网站建设服务平台枣庄手机网站开发公司
  • 工信部 网站备案材料 复印件 电子版搭建网站手机软件
  • 网站策划怎么样开源网站系统安全性
  • 好看的创意网站设计免费商用WordPress主题
  • iis搭建本地网站做静态网站接单
  • h5做网站用什么框架如何做某网站的移动客户端开发
  • 宿迁商城网站建设做国外lead应该做什么网站
  • 做360手机网站优化做定制网站多少钱
  • 厦门做网站需要多少钱企业网站建设找智恒网络
  • 佛山本地的网站设计公司惠州企业网站建设选哪家
  • 营销型网站建设优化建站常州网站备案
  • 官网建设建站网站和软件有什么区别
  • 河间做网站 申梦网络科技成果鉴定机构