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;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/877832.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python单例模式:深入解析与应用

在软件开发中&#xff0c;设计模式是解决问题和构建软件架构的模板和最佳实践。单例模式&#xff08;Singleton Pattern&#xff09;是设计模式中最简单也是最常用的一种。它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。这种模式在需要控制资源访问…

Error: Can not import paddle core while this file exists

背景 因为工作需要&#xff0c;原来的项目部署的电脑被征用&#xff0c;重新换了一个新电脑&#xff0c;重装了系统&#xff0c;今天在给一个使用ocr的项目进行环境配置的时候发现&#xff0c;无论安装哪个版本的paddlepaddle&#xff0c;总是可以安装成功&#xff0c;但是导入…

【模板方法】设计模式:构建可扩展软件的基石

本文主要介绍模板方法设计模式的定义、作用及使用场景 引言 在软件开发中&#xff0c;设计模式是解决常见问题的经过验证的解决方案。模板方法设计模式&#xff0c;作为行为型设计模式的一种&#xff0c;提供了一种在不牺牲灵活性的前提下定义算法框架的方法。 本文将深入探讨…

Vant 组件库在Vue3的使用

Vant 是一个轻量、可靠的移动端组件库&#xff0c;专为 Vue.js 框架设计&#xff0c;提供了丰富的组件来加速移动端应用的开发。以下是关于 Vant UI 组件库以及在 Vue 3 中的使用方法的介绍。 Vant 组件库介绍 Vant 组件库拥有以下特点&#xff1a; 轻量化&#xff1a;组件平…

第五题:最长回文子串(Longest Palindromic Substring)

题目描述&#xff1a; 给定一个字符串 s&#xff0c;找到 s 中最长的回文子串。 示例&#xff1a; 输入&#xff1a;s "babad" 输出&#xff1a;"bab" 或 "aba" 输入&#xff1a;s "cbbd" 输出&#xff1a;"bb" 要求…

开源接口自动化测试工具AutoMeter

AutoMeter是一款针对分布式服务和微服务API做功能和性能一体化的自动化测试平台。一站式提供项目管理&#xff0c;微服务&#xff0c;API接口&#xff0c;用例&#xff0c;环境管理&#xff0c;测试管理&#xff0c;前置条件&#xff0c;测试集合&#xff0c;变量管理&#xff…

【芯片设计- RTL 数字逻辑设计入门 9.4 -- Power Gating 在SoC 芯片电源完整性中的详细介绍】

文章目录 电源完整性简介电源完整性重要性电源完整性主要问题电源完整性问题优化什么是Power Gating?Power Gating的优势与挑战浪涌电流的产生与影响设计中的折中与优化电源完整性简介 电源完整性(Power Integrity, PI)是指在系统级设计中,确保电源分配网络(Power Distri…

kali安装

引言 Kali Linux 是一个基于 Debian 的 Linux 发行版&#xff0c;专门为渗透测试和安全审计而设计。它包含了大量的安全工具&#xff0c;如 Wireshark、Nmap、Metasploit 等&#xff0c;这些工具可以帮助安全专家和研究人员进行网络安全评估、漏洞检测和渗透测试。Kali Linux …

系统架构师(每日一练23)

每日一练 1.软件活动主要包括软件描述、()、软件有效性验证和()&#xff0c;()定义了软件功能及使用限制。答案与解析 问题1 A.软件模型 B.软件需求 C.软件分析 D.软件开发 问题2 A.软件分析 B.软件测试 C.软件演化 D.软件开发 问题3 A.软件分析 B.软件测试 C.软件描述 D.软…

进阶-5.锁

锁 1.概述2.全局锁3.表级锁3.1 介绍3.2 表锁3.3 元数据锁3.4意向锁 4.行级锁 1.概述 分类 按锁的粒度分类&#xff1a; 全局锁&#xff1a;锁住数据库中所有表表级锁&#xff1a;每次操作锁定整张表行级锁&#xff1a;每次操作锁定对应的行数据 2.全局锁 介绍 全局锁就是对…

第N11周:seq2seq翻译实战-Pytorch复现

任务&#xff1a; ●为解码器添加上注意力机制 一、前期准备工作 from __future__ import unicode_literals, print_function, division from io import open import unicodedata import string import re import randomimport torch import torch.nn as nn from torch impor…

Python中的变量:作用域与生命周期的秘密探索

引言 在编程的世界里&#xff0c;变量如同舞台上的演员&#xff0c;它们有着自己的“角色”——存储数据&#xff0c;也有着特定的“登场”和“退场”时刻&#xff0c;即作用域和生命周期。理解这些概念对于编写高效、可维护的代码至关重要。本文将带你一起探索Python中变量的…

一款好看的WordPress REST API 主题

介绍&#xff1a; 主题特色&#xff1a; 使用Nuxtjs WordPress Rest Api 实现前后端分离&#xff0c;可完成多端部署&#xff1b; 主题支持自动切换黑夜模式。 使用说明&#xff1a; service 目录为wordpress主题文件&#xff0c;需要拷贝到wordpress主题目录下&#xff0…

cmake install 区分Debug和Relase

需求&#xff1a; 在vs下界面运行install命令需要将生成的程序按relase和Debug安装到指定目录。 实现&#xff1a; 配置如下cmake set(CMAKE_INSTALL_PREFIX ${PUBLISH_DIR}) message(STATUS "PUBLISH_DIR dir:${PUBLISH_DIR}") install(TARGETS ${TARGET_NAME}…

记录一次经历:使用flask_sqlalchemy集成flask造成循环导入问题

前言&#xff1a; 工作需求&#xff0c;写一个接口&#xff0c;用Python来编写&#xff0c;我首先想到用flask小型框架来支撑&#xff0c;配置sqlalchemy来实现&#xff0c;但是在实现的过程中&#xff0c;发生循环导入问题 我想到用蓝图来解决此问题&#xff0c;但是仍然会出死…

基于PHP的文件上传

文件上传是现代网络应用中不可或缺的功能&#xff0c;它允许用户将本地文件存储到服务器上&#xff0c;用于后续的处理、分发或备份。 一、基于前端验证的文件上传 文件上传漏洞中的前端验证漏洞是一个常见且危险的问题。这类漏洞的产生主要是因为前端验证机制可以通过多种方…

设置虚拟机使用主机以太网而不是WiF连接

虚拟机使用主机的以太网连接而不是Wi-Fi连接&#xff0c;可以通过在虚拟化软件中配置虚拟机的网络设置来实现。以下是一些常见的虚拟化软件&#xff08;如VMware和VirtualBox&#xff09;中设置虚拟机网络以使用以太网连接的步骤&#xff1a; 一、VMware中设置 1、打开虚拟网…

微信小程序:点击事件(bindtap)传递参数

小程序在组件上绑定事件后&#xff0c;传递参数的方式不同于前端其他场景中直接加参数的方式&#xff0c;小程序在参数的传递时&#xff0c;采用事件对象的自定义属性的方式&#xff0c;具体实现如下&#xff1a; wxml&#xff1a; <view bindtap"goIndex" data…

JAVA双端队列Deque详解

Java中的双端队列&#xff08;Deque, 全称是double-ended queue&#xff09;是一种具有队列和栈的性质的抽象数据类型。双端队列中的元素可以从两端弹出&#xff08;在队列的头部和尾部进行添加或删除操作&#xff09;&#xff0c;因此它既可以作为FIFO&#xff08;先进先出&am…

天猫 登录滑块 淘系滑块分析

声明: 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关 前言 玩了几天现在才有空研究轨迹直接用了之前的…