LeetCode102.二叉树的层序遍历
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
if (root != NULL) que.push(root);
vector<vector<int>> result;
while (!que.empty()) {
int size = que.size();
vector<int> vec;
// 这里一定要使用固定大小size,不要使用que.size(),因为que.size是不断变化的
for (int i = 0; i < size; i++) {
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.翻转二叉树
代码:
class Solution {
public:
void verse(TreeNode* root){
if(root==NULL) return;
TreeNode* tmp = root->right;
root->right = root->left;
root->left = tmp;
verse(root->left);
verse(root->right);
}
TreeNode* invertTree(TreeNode* root) {
verse(root);
return root;
}
};
101. 对称二叉树
class Solution {
public:
bool check(TreeNode* r1,TreeNode* r2){
if(r1==NULL&&r2!=NULL) return false;
else if(r1!=NULL&&r2==NULL) return false;
else if(r1==NULL&&r2==NULL) return true;
else if(r1->val!=r2->val) return false;
bool f1 = check(r1->left,r2->right);
bool f2 = check(r1->right,r2->left);
return (f1&&f2);
}
bool isSymmetric(TreeNode* root) {
if(root==NULL)return true;
bool flag = check(root->left,root->right);
return flag;
}
};