#include <stdio.h>
#include <stdlib.h>
#define MAXQSIZE 100
typedef struct BTNode{
char data;
struct BTNode *lchild,*rchild;
}BTNode,*BiTree;
typedef struct{
BiTree *base;
int front;
int rear;
}SqQueue;
void InitBiTree(BiTree &bt){
char ch;
ch = getchar();
if(ch == '#'){
bt = NULL;
}
else{
bt = (BiTree)malloc(sizeof(BTNode));
bt->data = ch;
InitBiTree(bt->lchild);
InitBiTree(bt->rchild);
}
}
void InitQueue(SqQueue &Q){
Q.base = (BiTree *)malloc(sizeof(BiTree) * MAXQSIZE);
if(!Q.base)
return ;
Q.rear = Q.front = 0;
}
void EnQueue(SqQueue &Q, BiTree e){
Q.base[Q.rear ++] = e;
}
void DeQueue(SqQueue &Q, BiTree &t){
if(Q.front == Q.rear )
return ;
t = Q.base[Q.front ++];
}
int EmptyQueue(SqQueue Q){
if(Q.front == Q.rear)
return 1;
return 0;
}
int BiTreeDeepth(BiTree bt){
SqQueue Q;
BiTree p;
int level = 0, last = 1;
if(bt){
InitQueue(Q);
EnQueue(Q,bt);
while(Q.front < Q.rear ){
DeQueue(Q,p);
if(p->lchild )
EnQueue(Q,p->lchild);
if(p->rchild )
EnQueue(Q,p->rchild);
if(Q.front == last){
level ++;
last = Q.rear;
}
}
return level;
}
return 0;
}
int main(){
BiTree bt;
int deepth;
InitBiTree(bt);
deepth = BiTreeDeepth(bt);
printf("此二叉树的高度为:%d\n",deepth);
return 0;
}
层次遍历求二叉树的高度(非递归)
最新推荐文章于 2024-08-31 12:09:14 发布