P1305 新二叉树

题目描述

输入一串二叉树,用遍历前序打出。

输入输出格式

输入格式:

第一行为二叉树的节点数n。(n leq 26n26 )

后面n行,每一个字母为节点,后两个字母分别为其左右儿子。

空节点用*表示

输出格式:

前序排列的二叉树

// luogu-judger-enable-o2
#include<iostream>
#include<cstdio>
using namespace std;
int x[10005],n,a,b,c,zt,pnt;
char y;
void print(int s)
{
	if(pnt==n)
	{
		return;
	}
	if(x[s]!=0)
	{
		y=x[s]-1+'a';
		x[s]=0;
		cout<<y;
		pnt++;
	}
	if(x[s*2]!=0)
	{
		print(s*2);
	}
	else
	{
		if(x[s*2+1]!=0)
		{
			print(s*2+1);
		}
		else
		{
			if(s%2==0)
			{
				print(s/2);
			}
			else
			{
				s--;
				print(s/2);
			}
		}
	}
}
int main()
{
	cin>>n;
	for(a=1;a<=n;a++)
	{
		for(b=1;b<=3;b++)
		{
			cin>>y;
			if(y=='*')
			{
				continue;
			}
			else
			{
				if(a==1&&b==1)
				{
					x[1]=y-'a'+1;
				}
				if(b==1)
				{
					for(c=1;c<=3000;c++)
					{
						if(x[c]==y-'a'+1)
						{
							zt=c;
							break;
						}
					}
				}
				if(b==2)
				{
					x[zt*2]=y-'a'+1;
				}
				if(b==3)
				{
					x[zt*2+1]=y-'a'+1;
				}
			}
		}
	}
	print(1);
//	for(a=1;a<=50;a++)
//	{
//		y=x[a]-1+'a'; 
//		cout<<y;
//	}
}


原文地址:https://www.cnblogs.com/ztz11/p/9189970.html