LeetCode102. 二叉树的层序遍历
题目链接
视频讲解
自己实现
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> res;
queue<TreeNode*>que;
if(!root) return res;
que.push(root);
while(!que.empty()) {
int size = que.size();
vector<int> vec;
for(int i = 0; i < size; i++) {
TreeNode* temp = que.front();
que.pop();
vec.push_back(temp -> val);
if(temp -> left) que.push(temp -> left);
if(temp -> right) que.push(temp -> right);
}
res.push_back(vec);
}
return res;
}
};
题解
总结
LeetCode226. 翻转二叉树
题目链接
视频讲解
自己实现
递归法
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(!root) return root;
swap(root -> left, root -> right);
invertTree(root -> left);
invertTree(root -> right);
return root;
}
};
迭代法
class Solution {
public:
TreeNode* invertTree(TreeNode* root) {
if(!root) return root;
stack<TreeNode*>st;
st.push(root);
while(!st.empty()){
TreeNode* temp = st.top();
st.pop();
swap(temp -> left, temp -> right);
if(temp -> left) st.push(temp -> left);
if(temp -> right) st.push(temp -> right);
}
return root;
}
};
LeetCode101. 对称二叉树
题目链接
视频讲解
自己实现
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root) return true;
bool result = check(root -> left, root -> right);
return result;
}
bool check(TreeNode* left, TreeNode* right) {
if(left == NULL && right == NULL) return true;
else if(left == NULL && right) return false;
else if(left && right == NULL) return false;
else if(left -> val != right -> val) return false;
bool outSide = check(left -> left, right -> right);
bool inSide = check(left -> right, right -> left);
return outSide && inSide;
}
};