#include <iostream>
#include <queue>
#include <vector>
using namespace std;
struct TreeNode{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x):val(x),left(NULL),right(NULL){}
};
class Solution{
public:
vector<int> PrintFormTopToBottom(TreeNode *root)
{
vector<int> res;
queue<TreeNode *> q; //辅助队列
if(root==NULL){
return res;
}
q.push(root);
while(!q.empty()){
res.push_back(q.front()->val);
if(q.front()->left!=NULL){
q.push(q.front()->left);
}
if(q.front()->right!=NULL){
q.push(q.front()->right);
}
q.pop();
}
return res;
}
};
/**
* 判断是否为镜像二叉树
*/
class Solution1{
public:
bool IsmirrorTree(TreeNode *node1,TreeNode *node2)
{
if(node1==NULL &&node2==NULL){
return true;
}
if(node1->val!=node2->val||node1==NULL||node2==NULL)
{
return false;
}
return(IsmirrorTree(node1->left,node2->right)&&IsmirrorTree(node1->right,node2->left));
}
bool isSym(TreeNode *pRoot)
{
if(pRoot==NULL) return true;
TreeNode *left=pRoot->left;
TreeNode *right=pRoot->right;
return IsmirrorTree(left,right);
}
};
int main(int argc, char *argv[])
{
Solution sol;
vector<int> res;
TreeNode *root=new TreeNode(1);
root->left=new TreeNode(2);
root->right=new TreeNode(2);
res=sol.PrintFormTopToBottom(root);
for(int i:res)
cout<<i<<" ";
cout<<endl;
Solution1 sol1;
bool ret=sol1.isSym(root);
cout<<ret<<endl;
return 0;
}