文档讲解:代码随想录 (programmercarl.com)
视频讲解:代码随想录的个人空间-代码随想录个人主页-哔哩哔哩视频 (bilibili.com)
LeetCode 层序遍历
题目链接:102. 二叉树的层序遍历 - 力扣(LeetCode)
解题思路:利用队列处理节点。
代码如下:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*>qe;
if(root)qe.push(root);
vector<vector<int>>res;
// vector<int>line;
while(!qe.empty()){
// TreeNode*node=qe.front();
int size=qe.size();
vector<int>line;
for(int i=0;i<size;i++){
TreeNode*node=qe.front();
line.push_back(node->val);
qe.pop();
if(node->left)qe.push(node->left);
if(node->right)qe.push(node->right);
}
res.push_back(line);
}
return res;
}
};
LeetCode 反转二叉树
题目链接:226. 翻转二叉树 - 力扣(LeetCode)
解题代码如下(下面代码来自代码随想录 (programmercarl.com)):
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if (root == NULL) return root;
swap(root->left, root->right); // 中
invertTree(root->left); // 左
invertTree(root->right); // 右
return root;
}
};
LeetCode 对称二叉树
题目链接:101. 对称二叉树 - 力扣(LeetCode)
解题代码如下:
class Solution {
public:
bool compare(TreeNode*left,TreeNode*right){
if(left==nullptr&&right==nullptr)return true;
else if(left==nullptr&&right!=nullptr)return false;
else if(left!=nullptr&&right==nullptr)return false;
else{
if(left->val==right->val)return compare(left->left,right->right)&&compare(left->right,right->left);else return false; }
}
bool isSymmetric(TreeNode* root) {
if(!root)return true;
return compare(root->left,root->right);
}
};