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

Leetcode 100.101.110.199 二叉树相同/对称/平衡 C++实现

Leetcode 100. 相同的树

问题:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/

算法:判断根结点,如果都为空则相等,返回 true 。如果有一个为空,则 p == q 一定不成立,返回 false 。如果都不为空,则 if 条件不成立,判断根结点的值 val 、左子树、右子树是否相等。

代码:

class Solution {
public:bool isSameTree(TreeNode* p, TreeNode* q) {if(p == nullptr || q  == nullptr)    return p == q;// 如果pq都为空,则返回true,如果有一个为空则p == q不成立,返回falsereturn p->val == q->val && isSameTree(p->left,q->left) && isSameTree(p->right,q->right);// 都不为空则判断值相等、左右子树相同}
};

Leetcode 101. 对称二叉树

问题:给你一个二叉树的根节点 root , 检查它是否轴对称。

算法:根节点不用判断,只需判断左子树的右子树和右子树的左子树是否相等,以及左子树的左子树和右子树的右子树是否相等即可。

代码:

class Solution {// 在【100. 相同的树】的基础上稍加改动bool isSameTree(TreeNode *p, TreeNode *q) {if (p == nullptr || q == nullptr)    return p == q;return p->val == q->val && isSameTree(p->left, q->right) && isSameTree(p->right, q->left);}public:bool isSymmetric(TreeNode* root) {return isSameTree(root->left,root->right);}
};

Leetcode 110. 平衡二叉树

问题:给定一个二叉树,判断它是否是平衡二叉树

平衡二叉树 是指该树所有节点的左右子树的深度相差不超过 1

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/

算法:递归左右子树,得出深度。在过程中,如果检测出有子树不是平衡二叉树,则 return -1 ,一层层向上 return ,如果是平衡二叉树则 return 最大深度。

代码:

class Solution {int get_height(TreeNode* node){if(node == nullptr) return 0;// 空结点则returnint left_depth = get_height(node->left);// 左子树深度if(left_depth == -1)    return -1;// 遇到 -1 就 returnint right_depth = get_height(node->right);// 右子树深度if(right_depth == -1 || abs(left_depth - right_depth) >1)   return -1;//绝对值 > 1 表明不是平衡二叉树,也return -1return max(left_depth,right_depth) + 1;// 返回最大深度}
public:bool isBalanced(TreeNode* root) {return get_height(root) != -1;// 如果是 -1 证明不是平衡二叉树,return false ,不是 -1 则证明是平衡二叉树,返回 true}
};

Leetcode 199. 二叉树的右视图

问题:给定一个二叉树的根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/

算法:根结点 root 开始,利用返回数组 ans size 来判断是否已经有右边的结点填入到数组 ans 中,如果已经填入则跳到下一深度。

代码:

class Solution {vector<int> ans;void dfs(TreeNode* node,int depth){if(node == nullptr) return;if(depth == ans.size()) ans.push_back(node->val);// 这个深度首次遇到dfs(node->right,depth + 1);// 先递归右子树dfs(node->left,depth + 1);}
public:vector<int> rightSideView(TreeNode* root) {dfs(root,0);return ans;}
};

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL 的半同步模式
  • Python 设置Excel工作表页边距、纸张大小/方向、打印区域、缩放比例
  • 【MySQL】一文带你理清InnoDB引擎的<内部架构>(内存结构,磁盘结构,后台线程)
  • 数字图像处理【15】特征检测——SIFT特征检测
  • C语言中的预处理详解
  • 【迅为RK3568开发板】OpenHarmony学习开发系列教程(第2期 南向基础篇一)
  • JS中Object.prototype.toString方法解读
  • 链表--随机链表复制
  • python爬虫——入门
  • leetcode509:斐波那契数
  • 递归实现组合型枚举
  • 机器学习概述,深度学习,人工智能,无监督学习,有监督学习,增量学习,预处理,回归问题,分类问题
  • Redis篇一:初识Redis
  • 1.XV6环境配置
  • 20240824给飞凌OK3588-C的核心板刷Ubuntu22.04并安装iperf3测试网速
  • 「译」Node.js Streams 基础
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • ES6语法详解(一)
  • Java教程_软件开发基础
  • oschina
  • Python - 闭包Closure
  • 从 Android Sample ApiDemos 中学习 android.animation API 的用法
  • 聊聊flink的TableFactory
  • 入口文件开始,分析Vue源码实现
  • 实现简单的正则表达式引擎
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 在Docker Swarm上部署Apache Storm:第1部分
  • Linux权限管理(week1_day5)--技术流ken
  • 带你开发类似Pokemon Go的AR游戏
  • #{}和${}的区别?
  • (差分)胡桃爱原石
  • (分类)KNN算法- 参数调优
  • (四) Graphivz 颜色选择
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (原创)可支持最大高度的NestedScrollView
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • .“空心村”成因分析及解决对策122344
  • .NET Core 成都线下面基会拉开序幕
  • .NET MAUI Sqlite程序应用-数据库配置(一)
  • .NET 使用配置文件
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型
  • .sh 的运行
  • /boot 内存空间不够
  • @AliasFor 使用
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • []串口通信 零星笔记
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [AI 大模型] 百度 文心一言
  • [ASP.NET MVC]如何定制Numeric属性/字段验证消息
  • [C++] 从零实现一个ping服务
  • [cocos2d-x]关于CC_CALLBACK
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [Go]-抢购类业务方案