假设二叉树用二叉链表存储结构,设计一个算法求二叉树的高度。
1、递归方法
typedef struct BiTNode{
ElemType data;
struct BiTNode *next;
}BiTNode,*BiTree;
int BT_High(BiTree T){
if(T==NULL){
RETURN 0;
}
//h(T)=h(childT-max)+1; h(0)=0;
int ldep=BT_High(T->lchild);
int rdep=BT_High(T->rchild);
if(ldep>rdep)
return ldep+1;
else
return rdep+1;
}
2、非递归方法
typedef struct BiTNode{
ElemType data;
struct BiTNode *next;
}BiTNode,*BiTree;
int BT-High(BiTree T){
if(T==NULL)
return 0;
int front=-1; int rear=-1;//进队出队仅需++front/rear*
int last=0; int level=0;//last设置为根节点在队列中的位置
BiTree Q(MaxSize); //设置队列Q,元素是二叉树结点指针且容量足够*
Q[++rear]=T;
BiTNode *p;
while(front<rear){
p=Q[++front];
if(p->lchild)
Q[++rear]=p->lchild;
if(p->rchild)
Q[++rear]=p->rchild;
if(front==last){//front在rear前,当增加到上一次标记的层尾结点时*
level++;
last=rear;
}
}
return level;
}