层序遍历
题目链接/文章讲解/视频讲解:代码随想录
代码
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
if(root == nullptr) return {};
queue<TreeNode*> que;
TreeNode* temp;
vector<vector<int>> ans;
int size;
que.push(root);
while(!que.empty()){
vector<int> val;
size = que.size();
for(int i = 0; i < size; i++){
temp = que.front();
val.push_back(temp->val);
que.pop();
if(temp->left != nullptr) que.push(temp->left);
if(temp->right != nullptr) que.push(temp->right);
}
ans.push_back(val);
}
return ans;
}
};
107.二叉树的层次遍历II
class Solution {
public:
vector<vector<int>> levelOrderBottom(TreeNode* root) {
if(root == nullptr) return {};
vector<vector<int>> ans;
TreeNode* temp;
queue<TreeNode*> que;
que.push(root);
while(!que.empty()){
int size = que.size();
vector<int> val;
for(int i = 0; i < size; i++){
temp = que.front();
val.push_back(temp->val);
que.pop();
if(temp->left != nullptr) que.push(temp->left);
if(temp->right != nullptr) que.push(temp->right);
}
ans.push_back(val);
}
reverse(ans.begin(),ans.end());
return ans;
}
};
199.二叉树的右视图
class Solution {
public:
vector<int> rightSideView(TreeNode* root) {
if(root == nullptr) return {};
int size = 1;
queue<TreeNode*> que;
TreeNode* temp;
vector<int> ans;
que.push(root);
while(!que.empty()){
size = que.size();
for(int i = 0; i < size; i++){
temp = que.front();
if(i == size - 1) ans.push_back(temp->val);
que.pop();
if(temp->left != nullptr) que.push(temp->left);
if(temp->right != nullptr) que.push(temp->right);
}
}
return ans;
}
};
226.翻转二叉树 (优先掌握递归)
题目链接/文章讲解/视频讲解:代码随想录
递归法前序遍历和后序遍历都可以实现,中序不行
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(root == nullptr) return root;
invertTree(root->left);
invertTree(root->right);
swap(root->left, root->right);
return root;
}
};
101. 对称二叉树 (优先掌握递归)
题目链接/文章讲解/视频讲解:代码随想录
class Solution {
public:
bool isSymmetric(TreeNode* root) {
return traversal(root->left,root->right);
}
bool traversal(TreeNode* left, TreeNode* right){
if(left == nullptr && right == nullptr) return true;
else if(left == nullptr || right == nullptr) return false;
if(left->val != right->val) return false;
return traversal(left->left, right->right) && traversal(left->right,right->left);
}
};