一、二叉树的层序遍历
题目一:102. 二叉树的层序遍历
102. 二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
实现二叉树的层序遍历通常使用队列(Queue)来辅助进行。
在这个实现中:
首先检查根节点是否为空。如果是,直接返回空结果。
使用一个队列来存储每一层的节点。
对于队列中的每个节点,将其子节点(如果存在)添加到队列的末尾。
对于每一层,一直处理直到队列为空。
/** @lc app=leetcode.cn id=102 lang=cpp** [102] 二叉树的层序遍历*/// @lc code=start
/*** 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) {}* };*/
class Solution {
public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> result;if (root == nullptr) {return result;}queue<TreeNode*> q;q.push(root);while (!q.empty()) {int size = q.size();vector<int> currentLevel;for (int i = 0; i < size; i++) {TreeNode* currentNode = q.front();q.pop();currentLevel.push_back(currentNode->val);if (currentNode->left != nullptr) {q.push(currentNode->left);}if (currentNode->right != nullptr) {q.push(currentNode->right);}}result.push_back(currentLevel);}return result;}
};
// @lc code=end
二、翻转二叉树
题目一:226. 翻转二叉树
226. 翻转二叉树
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
在这个函数中:
检查当前节点是否为
nullptr
。如果是,则直接返回nullptr
。交换当前节点的左右子树。
递归地对左右子树调用
invertTree
函数。
/** @lc app=leetcode.cn id=226 lang=cpp** [226] 翻转二叉树*/// @lc code=start
/*** 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) {}* };*/
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (root == nullptr) {return nullptr;}TreeNode* temp = root->left;root->left = root->right;root->right = temp;invertTree(root->left);invertTree(root->right);return root;}
};
// @lc code=end
三、对称二叉树
题目一:101. 对称二叉树
101. 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
isSymmetric
函数检查是否给定的树是对称的。它调用isMirror
函数来比较树的左子树和右子树。
isMirror
函数递归地检查两个子树是否是彼此的镜像。它首先检查两个节点的值是否相等,然后递归地比较左子树的左子节点与右子树的右子节点,以及左子树的右子节点与右子树的左子节点。如果在任何时候,左子树和右子树不是彼此的镜像,函数将返回
false
。只有当所有对应的子树都是彼此的镜像时,它才返回true
。
/** @lc app=leetcode.cn id=101 lang=cpp** [101] 对称二叉树*/// @lc code=start
/*** 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) {}* };*/
class Solution {
public:bool isSymmetric(TreeNode* root) {if (root == nullptr) return true;return isMirror(root->left, root->right);}private:bool isMirror(TreeNode* left, TreeNode* right) {if (left == nullptr && right == nullptr) return true;if (left == nullptr || right == nullptr) return false;if (left->val != right->val) return false;return isMirror(left->left, right->right) && isMirror(left->right, right->left);}
};
// @lc code=end