Description


给定一颗二叉树的先序序列,求该二叉树的高。


Input

输入包括两部分第一部分:一个正整数n,代表有n颗二叉树第二部分:包括n行,每行代表一颗二叉树的先序遍历序列,空指针用字符^占位
Output
n行,每行一个整数,代表对应二叉树的高度


Sample Input

2
ABC^^^^
AB^^^

Sample Output

3
2

求二叉树的高是二叉树的基本操作,不再赘述;
需要注意的是:
开始先输入N,代表N组数据,N后会输入一个“\n”,需要getchar()一下;
同样的,每输入一组数据后,都会有个“\n”,需要getchar()一下;

 

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct node{
	char ch;
	struct node *Lchild;
	struct node *Rchild;
}Btree,*Ptree;
void Q_CreatTree(Ptree *T);
void Q_Traverse(Ptree T);
int TreeDeep(Ptree T); 
int main(void)
{
	int flag;
	scanf("%d",&flag);
	getchar();//注意换行符 
	while(flag--)
	{
	    Ptree T;
	    Q_CreatTree(&T);//前序遍历创建二叉树
	    getchar();//吞掉换行符 
		int deep=TreeDeep(T);
	    printf("%d\n",deep);
	}
}
void Q_CreatTree(Ptree *T)//前序遍历建立二叉树 
{
	char str;
	str=getchar();
	if(str=='^')
	{
		*T=NULL;
	}
	else
	{
		(*T)=(Ptree)malloc(sizeof(Btree));
		(*T)->ch=str;
		Q_CreatTree( &( (*T)->Lchild ) );
		Q_CreatTree( &( (*T)->Rchild ) );
	}
}
int TreeDeep(Ptree T)//求树的深度
{
	int n=0;
	if(T)
	{
		int L=TreeDeep(T->Lchild);
		int R=TreeDeep(T->Rchild);
		n=L+1>R+1?L+1:R+1;
	}
	return n;
 }