Description |
Description 根据输入构造二叉树,并输出二叉树的高度。 说明:输入的第一行为根结点;第二行以后每行的第二元为第一元的左孩子,第三元为第一元的右孩子, 0表示空。 |
Sample Input |
A A B D B 0 C D 0 0 C E 0 E 0 F F 0 0 |
Sample Output |
5 |
Hint |
说明:输出有换行 |
#include<iostream>
#include<stdio.h>
#include<queue>
using namespace std;
typedef struct BiTnode{//二叉树的存储结构
char data;
BiTnode *lc;
BiTnode *rc;
}BiTnode,*BiTree;
void initTree(BiTree &T,char data='*'){//初始化
T=new BiTnode;
T->lc=NULL;
T->rc=NULL;
if(data=='*'){
cin>>T->data;
}
else{
T->data=data;
}
}
queue<BiTree>Q;
void creatTree(BiTree &T){//递归创建二叉树
//不能是BFS和DFS 在递归前需要把当前结点勾链并输入左孩右孩
//同时运用队列来实现按照层次依次访问每一个非叶子结点(也就是每次递归的根节点)
if(Q.empty()){
return;
}
char ch;
int cnt=1;
while(cin>>ch)
{
if(T->data==ch) continue;
BiTnode *p=NULL;
if(ch!='0'){
initTree(p,ch);
}
if(cnt==1){
T->lc=p;
}
else{
T->rc=p;
}
if(p){
Q.push(p);
}
if(cnt==2) break;
cnt++;
}
Q.pop();
creatTree(Q.front());
}
int depth(BiTree T){//递归计算二叉树的深度
if(T==NULL){
return 0;
}
else{
int m=depth(T->lc);
int n=depth(T->rc);
if(m>n){
return (m+1);
}
else{
return (n+1);
}
}
}
int main(){
BiTree Tree;
initTree(Tree);
Q.push(Tree);
creatTree(Tree);
cout<<depth(Tree)<<"\n";
return 0;
}
注:本文用递归算法进行创建和计算深度,同时引用队列实现简单操作