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

闵行区 网站制作外贸网站如何seo

闵行区 网站制作,外贸网站如何seo,wordpress list,wordpress 全站404一、题目内容 题目要求找到给定二叉树中两个指定节点的最近公共祖先。最近公共祖先的定义为:对于有根树 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/397327.html

相关文章:

  • 如何选择企业网站建设免费linux云服务器
  • 快站教程网站系统繁忙怎么办
  • 大连哪家做网站比较好哈尔滨网站外包
  • 效果好的网站建设公郑州网页网站制作
  • 织梦iis7搭建网站教程蓝色管理系统网站模版
  • 视频网站开发步骤上海企业网上公示系统
  • 装饰公司响应式网站建设案例太原市建设厅官方网站
  • 在线原型设计网站网站建设收费标准教程
  • 为什么做电影网站没有流量提供扬中网站建设
  • 临平网站建设微信公众号预约
  • 沈阳网站建设招标公司网络推广经验交流
  • 成品门户网站源码免费怎样做网站链接
  • 深圳建设管理中心网站首页怎么下载浏览器上的视频
  • 宜和购物电视购物官方网站科技感十足的网站
  • 建设网站需要体现的流程有哪些内容下载软件的网站哪个好
  • 网站多久营销型网站建设开发价格
  • 广告网站留电话整人wp资源网主题
  • 电脑上做网站的软件哪个网站建网页比较好
  • 好看的手机网站推荐网站建设平台方案设计
  • 搭建公司网站教程校园推广
  • 网站站内内链建设制作网页查询系统
  • 有服务器有域名如何做网站wordpress 十万条信息
  • 快递网站模版大连网站建设策划
  • 陕西网站制作电话网站接入服务商
  • 山西省诚信建设网站网络规划设计师视频教程网盘
  • 网站建设客户问到的问题专业设计美容院装修公司
  • 零基础自学网站建设云南网站建设哪家强
  • 在上海做钟点工的网站北京哪家做网站优化
  • 怎样给装修公司做网站建设银行积分兑换商城官方网站
  • 一加手机官网网站网站背景图片怎么做