102.二叉树的层序遍历 Binary Tree Level Order Traversal
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
vector<vector<int>> result;
if (root != NULL){
que.push(root);
}
while (!que.empty()){
int size = que.size();
vector<int> vec;
while (size--){
TreeNode* node = que.front();
que.pop();
vec.push_back(node->val);
if (node->left){
que.push(node->left);
}
if (node->right){
que.push(node->right);
}
}
result.push_back(vec);
}
return result;
}
};
226.翻转二叉树 Invert Binary Tree
前序遍历 中左右
使用递归法
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;
}
};
101.对称二叉树 Symmetric Tree
必须使用后序遍历
class Solution {
public:
bool compare(TreeNode* left, TreeNode* right){
if (left == NULL && right != NULL) {
return false;
} else if (left != NULL && right == NULL){
return false;
} else if (left == NULL && right == NULL){
return true;
} else if (left->val != right->val) {
return false;
}
bool outside = compare(left->left, right->right);
bool inside = compare(left->right, right->left);
bool checksame = outside && inside;
return checksame;
}
bool isSymmetric(TreeNode* root) {
if (root == NULL){
return false;
}
return compare(root->left, root->right);
}
};