leetcode - 226. 翻转二叉树
题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/e989f1e5b9f33cc9dd9639b1a254e57c.png)
代码
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
typedef struct TreeNode{
int val;
struct TreeNode *left, *right;
}TreeNode, *BiTree;
void create(BiTree &root){
int tn;
cin>>tn;
if(tn == -1){
root = NULL;
return;
}
root = new TreeNode;
root->val = tn;
create(root->left);
create(root->right);
}
TreeNode* invertTree1(TreeNode* root) {
if(!root){
return NULL;
}
TreeNode *left = invertTree(root->left);
TreeNode *right = invertTree(root->right);
root->left = right;
root->right = left;
return root;
}
TreeNode* invertTree(TreeNode* root) {
if(!root){
return root;
}
queue<TreeNode*> qn;
qn.push(root);
while(!qn.empty()){
int qs = qn.size();
for(int i = 0; i < qs; i++){
TreeNode *p = qn.front();
qn.pop();
if(p->left || p->right){
TreeNode *q = p->right;
p->right = p->left;
p->left = q;
}
if(p->left){
qn.push(p->left);
}
if(p->right){
qn.push(p->right);
}
}
}
return root;
}
int main(){
TreeNode *root, *res;
create(root);
res = invertTree(root);
return 0;
}