LeetCode hot100---二叉树专题(C++语言)

devtools/2024/10/21 3:39:10/

1、中序遍历

(1)题目描述以及输入输出

(1)题目描述:
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。(2)输入输出描述:
输出节点值到一个数组关键思路:
左中右遍历

(2)代码块

class Solution {
public:void traversal(TreeNode* root,vector<int>& record){if(root == nullptr)return;traversal(root->left,record);	// 直到碰到左节点为空才会跳出,下一步就会打印二叉树最左节点的值record.push_back(root->val);traversal(root->right,record);}vector<int> inorderTraversal(TreeNode* root) {vector<int> record;traversal(root,record);return record;}
};

2、二叉树的最大深度

(1)题目描述以及输入输出

(1)题目描述:
给定一个二叉树 root ,返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。(2)输入输出描述:
输出一个最大深度关键思路:

(2)代码块

class Solution {
public:int getdepth(TreeNode* root){if(root == nullptr)return 0;int leftdepth = getdepth(root->left);		// 计算当前节点左子节点最大深度,int rightdepth = getdepth(root->right);int depth = max(leftdepth,rightdepth)+1;	// 计算当前节点深度	return depth;}int maxDepth(TreeNode* root) {return getdepth(root);}
};

3、翻转二叉树

(1)题目描述以及输入输出

(1)题目描述:
给定一个二叉树 root ,翻转所有节点。(2)输入输出描述:关键思路:
先翻转当前节点的左右节点,
接着递归翻转子节点左右

(2)代码块

class Solution {
public:TreeNode* invertTree(TreeNode* root) {if(root == nullptr)return root;swap(root->left,root->right);invertTree(root->left);invertTree(root->right);return root;}
};

4、对称二叉树

(1)题目描述以及输入输出

(1)题目描述:
给你一个二叉树的根节点 root , 检查它是否轴对称。(2)输入输出描述:关键思路:
对于每次递归,要检查root->left,root->right是否对称,
因此递归函数是进行遍历检测

(2)代码块

class Solution {
public:bool recur(TreeNode* left,TreeNode* right){if(left == nullptr && right == nullptr)return true;if(left == nullptr || right == nullptr || left->val != right->val)return false;return recur(left->left,right->right) && recur(left->right,right->left);}bool isSymmetric(TreeNode* root) {return root == nullptr || recur(root->left,root->right);}
};

5、二叉树的直径

(1)题目描述以及输入输出

(1)题目描述:
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。(2)输入输出描述:关键思路:
递归求左子节点深度与右子节点深度,最后相加即可

(2)代码块

class Solution {
public:
int result = 0;int depth(TreeNode* root){if(!root)return 0;int L = depth(root->left);		// 当前节点的左节点深度int R = depth(root->right);		// 当前节点的右节点深度result = max(result,L+R);return max(L,R) + 1;}int diameterOfBinaryTree(TreeNode* root) {depth(root);return result;}
};

5、二叉树的直径

(1)题目描述以及输入输出

(1)题目描述:
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。(2)输入输出描述:关键思路:
递归求左子节点深度与右子节点深度,最后相加即可

(2)代码块

class Solution {
public:
int result = 0;int depth(TreeNode* root){if(!root)return 0;int L = depth(root->left);int R = depth(root->right);result = max(result,L+R);return max(L,R) + 1;}int diameterOfBinaryTree(TreeNode* root) {depth(root);return result;}
};

http://www.ppmy.cn/devtools/121911.html

相关文章

c#中的功能优势

装箱和拆箱 性能消耗的直接体现 int iterations 10000000; // 进行一千万次迭代Stopwatch stopwatch new Stopwatch();// 非装箱测试stopwatch.Start();for (int i 0; i < iterations; i){int x i; // 纯值类型操作&#xff0c;无装箱}stopwatch.Stop();Console.Writ…

Microsoft Visual Studio有多油饼

#1 Microsoft Visual Studio C 2023&#xff1a; 必须安装在C盘 为啥&#xff1f; 安其他盘能亖啊&#xff1f; 真有病 #2 Microsoft Visual Studio C 2013&#xff1a; 每个硬盘必须都腾出至少8个G的空间 不是我安在这个盘不就是为了其他盘没空间吗&#xff1f; 合着…

python程序操作Windows系统中的软件如word等(是否可以成功操作待验证)

一、python打开word软件 在 Python 中可以使用python-docx库来操作 Word 文档&#xff0c;但如果你的需求是直接打开 Word 软件&#xff0c;你可以使用os模块和subprocess模块来实现。以下是示例代码&#xff1a; import os import subprocessdef open_word():word_path rC:…

使用ESPnet的 setup_anaconda.sh安装脚本一步到位,配置conda虚拟环境

使用ESPnet的 setup_anaconda.sh 安装脚本一步到位&#xff0c;配置conda虚拟环境 前言 ESPnet&#xff08;End-to-End Speech Processing Toolkit&#xff09;是一款用于语音识别、语音合成等任务的开源端到端语音处理工具包。为了在不同系统上快速配置ESPnet开发环境&#…

【计算复杂性理论】P可归约(归约,P-reducible)与P、NP、NP-Hard、NP-Complete问题

1 问题背景 如果想要了解P问题、NP问题、NP-Hard问题、NP-Complete问题之间的关系&#xff0c;那就需要从了解NP-complete问题和归约概念开始。上一篇文章中&#xff0c;我们介绍了计算复杂性理论的奠基之作《The Complexity of Theorem-Proving Procedures》&#xff0c;在这篇…

【信号与系统第五章】13、希尔伯特变换

定义 从频域看希尔伯特变换 希尔伯特变换的性质 性质1 性质1证明 性质2 性质2证明 证明关键点&#xff1a;若&#xff0c;则&#xff0c;原因&#xff1a; 典型信号的希尔伯特变换 证明 希尔伯特变换的应用 参考&#xff1a; 希尔伯特变换-傅里叶变换的好伙伴_哔哩哔哩_bili…

Redis的基本使用

简介 传统的数据库是 关系数据库&#xff0c;但是Redis是键值对数据库传统的数据库是基于 磁盘存储的&#xff0c;但是Redis是基于 内存存储的 基于内存&#xff0c;读写性能更高内存是不大的&#xff0c;只能存储热点信息 安装 绿色软件&#xff0c;安装即可使用 安装服务 手…

二分查找一>x 的平方根

1.题目&#xff1a; 2.解析&#xff1a; 代码&#xff1a; public int mySqrt(int x) {if(x < 1) return 0;long left 1,right x;while(left < right){long mid left (right-left1) / 2;if(mid*mid < x) left mid;else right mid-1;}return (int)left;}