leetcode--hot100--思路+知识点(II)
31.二叉树中序遍历
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 
输入:root = [1,null,2,3] 输出:[1,3,2]
知识点
| 遍历方式 | 核心顺序 | 
|---|---|
| 前序 | 根 → 左 → 右 | 
| 中序 | 左 → 根 → 右 | 
| 后序 | 左 → 右 → 根 | 
struct TreeNode {
int val; // 节点存储的值(此处以int为例,可根据需求修改类型)
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) {}
};
代码
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
inorderHelper(root, result);//中序遍历
return result;
}
void inorderHelper(TreeNode* node, vector<int>& result) {
if (node == nullptr) return;
inorderHelper(node->left, result); // 访问左子树
result.push_back(node->val); // 访问根节点
inorderHelper(node->right, result); // 访问右子树
}
};
32.二叉树的最大深度
给定一个二叉树 root ,返回其最大深度。
二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。
class Solution {
public:
int maxDepth(TreeNode* root) {
if (!root) return 0; // 空节点深度为0
int left_depth = maxDepth(root->left); // 左子树深度
int right_depth = maxDepth(root->right); // 右子树深度
return 1 + max(left_depth, right_depth); // 当前节点深度
}
};
33.反转二叉树
给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。
输入:root = [4,2,7,1,3,6,9] 输出:[4,7,2,9,6,3,1]
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == nullptr) return nullptr;
// 递归翻转左子树
TreeNode* left = invertTree(root->left);
// 递归翻转右子树
TreeNode* right = invertTree(root->right);
// 交换左右子树
root->left = right;
root->right = left;
return root;
}
};
34.对称二叉树
给你一个二叉树的根节点 root , 检查它是否轴对称。
输入:root = [1,2,2,3,4,4,3] 输出:true
35.二叉树的直径
给你一棵二叉树的根节点,返回该树的 直径 。
二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。
两节点之间路径的 长度 由它们之间边数表示。
输入:root = [1,2,3,4,5] 输出:3 解释:3 ,取路径 [4,2,1,3] 或 [5,2,1,3] 的长度。
