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

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

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.mrgr.cn/news/43439.html

相关文章:

  • 十二、血条UI
  • 0-1背包问题
  • Windows 11 24H2 v26100.1742 官方简体中文版
  • 【图论】树剖(上):重链剖分
  • ChatGPT Canvas:交互式对话编辑器
  • Matlab编程示例24:freexyn在b站的读取手写体mnist数据集的matlab代码
  • [NeurIPS 2022] STaR: Bootstrapping Reasoning With Reasoning
  • 计算机视觉算法知识详解(含代码示例)
  • Koa2项目实战1(项目搭建)
  • 【Mybatis篇】Mybatis的关联映射详细代码带练 (多对多查询、Mybatis缓存机制)
  • C语言自定义类型联合和枚举(25)
  • Vue之父尤雨溪成立VoidZero公告,已获得 460 万美元种子轮融资
  • 【hot100-java】【将有序数组转换为二叉搜索树】
  • 事业群 BG、业务单元 BU 极简理解
  • 【C++ STL】手撕vector,深入理解vector的底层
  • AES加密算法的详细描述和C语言实现
  • 职场中的10个“人情世故”,随处可见
  • JavaWeb的小结02
  • JavaScript作用域详解
  • C语言导航 2.2数据类型