层序遍历十道题:
102. 二叉树的层序遍历:力扣
107. 二叉树的层序遍历 II:力扣
199. 二叉树的右视图:力扣
226. 翻转二叉树:力扣
101. 对称二叉树:力扣
层序遍历
102. 二叉树的层序遍历
给你二叉树的根节点 root
,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
输入:root = [3,9,20,null,null,15,7] 输出:[[15,7],[9,20],[3]]
解法:队列
由于这里需要每一层分别存为一个vector,所以在写的时候需要提前记录一下上一层的大小(q的大小)
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*> q;
TreeNode* node;
if(root != nullptr) q.push(root);
while(!q.empty()){
res.push_back(vector<int>());
int size = q.size(); // 提前记录q的大小
for(int i = 0; i < size; i++){
node = q.front();
q.pop();
res[res.size() - 1].push_back(node->val);
if(node->left != nullptr) q.push(node->left);
if(node->right != nullptr) q.push(node->right);
}
}
return res;
}
};
107. 二叉树的层序遍历 II
给你二叉树的根节点 root
,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
199. 二叉树的右视图
给定一个二叉树的 根节点 root
,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。
(待续)
226. 翻转二叉树
给你一棵二叉树的根节点 root
,翻转这棵二叉树,并返回其根节点。
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
queue<TreeNode*> q;
if(root != nullptr) q.push(root);
TreeNode* node, *temp;
while(!q.empty()){
node = q.front();
q.pop();
temp = node->left; node->left = node->right; node->right = temp;
if(node->left != nullptr) q.push(node->left);
if(node->right != nullptr) q.push(node->right);
}
return root;
}
};
101. 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(root->left == nullptr && root->right == nullptr) return true;
else if(root->left == nullptr || root->right == nullptr || root->left->val != root->right->val) return false;
queue<TreeNode*> q1, q2;
q1.push(root->left);
q2.push(root->right);
TreeNode* n1, *n2;
while(!q1.empty()){
n1 = q1.front();
n2 = q2.front();
q1.pop();
q2.pop();
if(n1->left == nullptr && n2->right == nullptr);
else if(n1->left != nullptr && n2->right != nullptr && n1->left->val == n2->right->val){
q1.push(n1->left);
q2.push(n2->right);
}
else return false;
if(n1->right == nullptr && n2->left == nullptr);
else if(n1->right != nullptr && n2->left != nullptr && n1->right->val == n2->left->val){
q1.push(n1->right);
q2.push(n2->left);
}
else return false;
}
return true;
}
};