PAT甲级 1102 Invert a Binary Tree (25分) 二叉树层序+中序遍历/C++

1102 Invert a Binary Tree (25分)

可以说是非常基础的一道题目了

题目大意:给一棵二叉树,要求输出反转二叉树(左右孩子交换位置)的层次遍历和中序遍历

考察点:

  1. 二叉树的输入,寻找根结点
  2. 层序遍历和中序遍历
#include<iostream>                  //输入输出流头文件
#include<queue>                     //队列
#include<string>                    //C++string类
using namespace std;                //标准命名空间
struct invertTree{
	int right;
	int left;
};
invertTree t[10];
int flag[10]={0};
string s;
void createTree(int n);
void levelOrder(int r);
void inOrder(int r);
int main(){                         //主函数
#ifdef ONLINE_JUDGE                 //如果有oj系统(在线判定),则忽略文件读入,否则使用文件作为标准输入
#else    
   freopen("1.txt", "r", stdin);   //从1.txt输入数据
#endif 
    int n;
	cin>>n;
	createTree(n);
	int i=0;
	for(;i<n;i++) //找到根结点
		if(flag[i]==0)break;
	int root=i;
	levelOrder(root);
	cout<<endl;
	inOrder(root);
	cout<<s.substr(0,s.size()-1)<<endl;
    return 0;                       //返回0,如果不返回0,PAT会报错
}
void createTree(int n){
	for(int i=0;i<n;i++){
		char x,y;
		cin>>x>>y;
		if(x!='-') {//把先输入的作为右孩子,后输入的作为左孩子。即完成反转
			t[i].right=x-'0';
			flag[t[i].right]=1;
		}
		else t[i].right=-1;
		if(y!='-'){
			t[i].left=y-'0';
			flag[t[i].left]=1;
		}
		else t[i].left=-1;
	}
}
void levelOrder(int r){
	queue<int> q;
	q.push(r);
	while(!q.empty()){
		int x=q.front();
		if(t[x].left!=-1)
			q.push(t[x].left);
		if(t[x].right!=-1)q.push(t[x].right);
		cout<<x;
		q.pop();
		if(!q.empty())cout<<' ';
	}
}
void inOrder(int r){
	if(r==-1) return ;
	if(t[r].left!=-1)
		inOrder(t[r].left);
	s+='0'+r;
	s+=" ";
	if(t[r].right!=-1)
		inOrder(t[r].right);
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值