PAT程序设计考题——甲级1102( Invert a Binary Tree ) C++实现

来源:互联网 发布:windows查看显存 编辑:程序博客网 时间:2024/06/07 17:39
#include<iostream>
#include<math.h>
#include<algorithm>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<string>
#include<vector>
using namespace std;
#define INF 100000000
#define maxn 100010
struct node{//由于题目中直接 给出了节点关系 用静态二叉树比较方便
 int lchild;
 int rchild;
};
node tree[maxn];
bool notroot[maxn]={false};
int n,num=0;//n为节点的 个数 num为当前一斤输出的节点的个数
void print (int id)
{
 cout<<id;
 num++;
 if(num<n) cout<<" ";
 else cout<<endl;
}
void inorder(int root)
{ if(root==-1) return;
 inorder(tree[root].lchild);
 print(root);
 inorder(tree[root].rchild);
 }
 void BFS(int root)
 {
  queue<int> q;
  q.push(root);
  while(!q.empty())
  {
   int temp=q.front();
   q.pop();
   print(temp);
  if(tree[temp].lchild!=-1) q.push(tree[temp].lchild);
  if(tree[temp].rchild!=-1) q.push(tree[temp].rchild);
  }
 }
 void post(int root)//翻转二叉树
 {
  if(root==-1) return;
  post(tree[root].lchild);
  post(tree[root].rchild);
  swap(tree[root].lchild,tree[root].rchild);
 }
 
int main()
{ cin>>n;
char a,b;
for(int i=0;i<n;i++)
{
 cin>>a>>b;
 if(a=='-') tree[i].lchild=-1;
 else tree[i].lchild=a-'0',notroot[a-'0']=true;
 if(b=='-') tree[i].rchild=-1;
 else tree[i].rchild=b-'0',notroot[b-'0']=true;
}
int root;
for(int i=0;i<n;i++){
root=i;
 if(notroot[i]==false) break;
 }
 post(root);
 //cout<<root;
BFS(root);
 num=0;
 inorder(root);
 return 0;
 }
阅读全文
0 0