leetcode 226
**Question:**Invert a binary tree.
可以采用两种方法:递归和非递归(利用队列)
代码如下:
#include<iostream>
#include<queue>
using namespace std;
typedef struct TreeNode {
char val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
TreeNode() : left(NULL),right(NULL) {}
}*BiTree;
class Solution {
public:
//递归
TreeNode* invertTree(TreeNode *root) {
if(root==NULL)
return root;
TreeNode *temp;
temp=root->left;
root->left=root->right;
root->right=temp;
invertTree(root->left);
invertTree(root->right);
return root;
}
//非递归,利用队列
TreeNode* invertTree(TreeNode *root) {
if(root==NULL)
return root;
queue<TreeNode *> queue;
queue.push(root);
while(!queue.empty()) {
TreeNode *Node=queue.front();
queue.pop();
//交换左右子树
TreeNode *temp=Node->left;
Node->left=Node->right;
Node->right=temp;
if(Node->left)
queue.push(Node->left);
if(Node->right)
queue.push(Node->right);
}
return root;
}
//构造二叉树
void CreateNode(BiTree &root) {//注意这里的参数
char data;
data=getchar();
if(data=='#')
root=NULL;
else
{
root=new TreeNode();
root->val=data;
CreateNode(root->left);
CreateNode(root->right);
}
}
//打印
void PrintTree(TreeNode *root) {
if(root==NULL)
{
cout<<"#";
return;
}
cout<<root->val;
PrintTree(root->left);
PrintTree(root->right);
}
};
void main()
{
Solution S;
BiTree root=NULL;
S.CreateNode(root);
S.PrintTree(root);
cout<<endl;
S.invertTree(root);
S.PrintTree(root);
cout<<endl;
}