算法思想: 采用层次遍历的算法思想,设置变量level 来记录当前结点所在的层数,设置last指向当前层数的最右结点,每次层次遍历出队时与last指针比较,相等则层数加一,并让last指向下一层的最右结点。
每处理到这一层的最后一个结点时,他的下一层的结点也全部入队了,这时 就使last = rear 即可使last标识下一层最右结点的位置,且使层数level加一
算法实现:
非递归算法:
int Btdepth(BiTree T)
{
if(!T){
return 0; //如果树为空则返回0
}
int front=-1,rear = -1;
int last=0,level = 0;
BiTree Q[Maxsize]; //设置队列Q,元素类型为二叉树结点指针
Q[++rear] = T; //根结点入队
BiTree p;
while(front < rear){ //队不空则循环
p=Q[++front];
if(p->lchild){
Q[++rear] = p->lchild;
}
if(p->rchild){
Q[++rear] = p->rchild;
}
if(front == last){
level++;
last = rear ; //这一步就是算法的核心
}
}
return level;
}
递归算法:
int Btdepth2(BiTree T){
if(T==null){
return 0;
}
ldep = Btdepth2(T->lchild);
rdep = Btdepth2(T->rchild);
if(ldep > rdep){
return ldep +1;
}
else{
return rdep +1;
}
}