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

湖南长沙网站建设公司电话建立网站的基本步骤

湖南长沙网站建设公司电话,建立网站的基本步骤,室内设计平面方案讲解,建筑方案设计师的工作内容一、摘要 今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。 二、题目简介 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单…

一、摘要

今天要讲的是leetcode单值二叉树,这里用到的C语言,主要提供的是思路,大家看了我的思路之后可以点击链接自己试一下。

二、题目简介

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false

示例 1:

输入:[1,1,1,1,1,null,1]
输出:true

示例 2:

输入:[2,2,2,5,2]
输出:false

提示:

  1. 给定树的节点数范围是 [1, 100]
  2. 每个节点的值都是整数,范围为 [0, 99] 。

三、思路分析

思路一(递归)

当我们看到这道题目时,一个直观的想法是通过递归遍历二叉树来解决问题。在遍历过程中,我们需要将每个节点的值与根节点的值进行比对。如果所有节点的值都与根节点一致,那么返回 true;否则返回 false。这种方法与递归实现二叉树的前序、中序或后序遍历有一定的相似性。因此,我们需要注意二叉树的结构特性,确保在遍历过程中,左子树和右子树都被完整地访问到。这是解决这道题的一个常见思路。

接下来,我将通过代码来展示这个思路的实现。


代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/bool isUnivalTree(struct TreeNode* root) {// 如果当前节点为空,说明已经遍历到叶子节点的子节点,返回 trueif (root == NULL) {return true;}// 检查左子节点是否存在,且其值是否与当前节点的值不同if (root->left && root->left->val != root->val) {return false;}// 检查右子节点是否存在,且其值是否与当前节点的值不同if (root->right && root->right->val != root->val) {return false;}// 递归检查左子树和右子树return isUnivalTree(root->left) && isUnivalTree(root->right);
}

大家可以代入一个中途不相同值的二叉树,进行递归展开,这个递归比较简单很好理解。

 思路二(迭代)

递归方法虽然简洁,但在某些情况下可能会受到递归深度的限制(尤其是对于非常深的二叉树)。我们可以使用迭代法来避免递归的开销。

  1. 使用一个队列来存储待访问的节点。

  2. 从根节点开始,将根节点的值作为目标值。

  3. 遍历队列中的每个节点,检查其值是否与目标值一致。

  4. 如果发现任意一个节点的值与目标值不同,直接返回 false

  5. 如果所有节点都通过检查,最终返回 true

代码实现:

#include <stdbool.h>
#include <stdlib.h>/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     struct TreeNode *left;*     struct TreeNode *right;* };*/bool isUnivalTree(struct TreeNode* root) {if (root == NULL) return true;  // 空树是单值二叉树int target = root->val;  // 目标值为根节点的值struct TreeNode* queue[100];  // 队列,假设最多100个节点int front = 0, rear = 0;queue[rear++] = root;  // 将根节点加入队列while (front < rear) {struct TreeNode* node = queue[front++];  // 出队if (node->val != target) return false;  // 如果当前节点值与目标值不同,直接返回false// 将左右子节点加入队列(如果存在)if (node->left) queue[rear++] = node->left;if (node->right) queue[rear++] = node->right;}return true;  // 所有节点都通过检查,返回true
}

代码解释:

  1. 队列初始化

    • 使用一个数组 queue 作为队列,存储待访问的节点。

    • 使用两个指针 frontrear 分别表示队列的头部和尾部。

  2. 目标值

    • 将根节点的值作为目标值 target,所有节点的值都需要与它一致。

  3. 层次遍历

    • 从根节点开始,将其加入队列。

    • 每次从队列中取出一个节点,检查其值是否与目标值一致。

    • 如果一致,将其左右子节点(如果存在)加入队列。

    • 如果发现任意一个节点的值与目标值不同,直接返回 false

  4. 结束条件

    • 如果队列为空,说明所有节点都已检查完毕,返回 true

优点:

  • 避免递归:使用迭代法避免了递归的深度限制问题。

  • 逻辑清晰:层次遍历的逻辑直观,容易理解和实现。

  • 高效:时间复杂度为 O(n),其中 n 是树的节点数。

其实这道题思路和内容都挺简单的,这道题还可以通过全局变量记录目标值,或者DFS来实现,我们在日常学习过程中都可以通过一题多解的方法来锻炼代码思考能力。好啦今天的leetcode每日一题就到这里啦!

http://www.hkea.cn/news/152716/

相关文章:

  • 个人网站建设需求说明书免费外链生成器
  • 湖南网站建设的公司排名网页制作网站制作
  • 公司网页网站建设 ppt模板app开发公司排行榜
  • 网站开发yuanmus联合早报 即时消息
  • 为什么只有中国人怕疫情seo 页面
  • 网站开发总结报告十大门户网站
  • 临淄信息港发布信息临沂seo建站
  • 门户网站系统介绍企业推广哪个平台好
  • 免费网站建站排行榜网站策划报告
  • 网站设计的评估最近发生的热点新闻
  • 设建网站广告投放渠道
  • 日ip5000的网站怎么做如何提高网站在搜索引擎中的排名
  • 网站描文本链接怎么做深圳互联网营销
  • 一个服务器做两个网站自己做网站
  • 百草味网站建设的活动方案营销型企业网站有哪些
  • 论文课程网站 建设背景项目推广方式有哪些
  • 内部网站建设关键词优化推广策略
  • 一个公司可以做几个网站备案贵阳网络推广排名
  • 武汉高端网站建设免费广告网
  • 大理建网站常用于网站推广的营销手段是
  • js怎么做网站跨境电商网站
  • 台州外贸网站建设百度推广费用多少
  • 虚拟机怎么做网站空间培训班管理系统 免费
  • wordpress离线文章发布郑州seo关键词排名优化
  • 龙岗区网站建设中国职业培训在线
  • 南山网站建设外包优化网站
  • 个人怎么做网站推广神起网络游戏推广平台
  • 做网站的关键技术运营推广的方式和渠道有哪些
  • jsp做就业网站网推项目
  • 网站开发的目的和意义重庆seo排名电话