1.题目:
Problem Description
一个名字叫Small Green的同学,很喜欢研究树的问题。某一天,他随意地在纸上乱涂乱画,画出了各不相同的二叉树,他同时在想:一颗满的二叉树的深度并不难求。但如果要求出一颗二叉树(可能不是满二叉树)的深度,那么该如何求呢?
Input
输入包含多个例子,每个例子的第一行为一个整数n,表示以下有n组数据,每组数据占一行,为扩展二叉树的前序遍历序列(长度小于50,若节点为NULL则用'#'表示,否则用小写字母表示)。
Output
输出该二叉树的深度。
Sample Input
2
abcd####efg####
abcd####efg#h###i##
Sample Output
4
5
2.参考代码:
#include <iostream>
using namespace std;
struct BiNode{
char data;
BiNode* lchild,* rchild;
};
class BiTree{
private:
BiNode* root;
BiNode* Creat();
void Release(BiNode* root);
public:
BiTree();
~BiTree();
BiNode* GetRoot(){
return root;
}
int depth(BiNode* root);
};
BiNode* BiTree::Creat(){
BiNode* root=new BiNode;
char ch;
cin>>ch;
if(ch=='#')
root=NULL;
else{
root->data=ch;
root->lchild=Creat();
root->rchild=Creat();
}
return root;
}
void BiTree::Release(BiNode* root){
if(root){
Release(root->lchild);
Release(root->rchild);
delete root;
}
}
BiTree::BiTree(){
root=Creat();
}
BiTree::~BiTree(){
Release(root);
}
int BiTree::depth(BiNode* root){
int l,r;
if(root==NULL)
return 0;
else{
l=depth(root->lchild);
r=depth(root->rchild);
return l>r?(l+1):(r+1);
}
}
int main()
{
int n;
while(cin>>n)
{
while(n--){
BiTree bt;
BiNode* root=bt.GetRoot();
cout<<bt.depth(root)<<endl;
}
}
return 0;
}