采用层次遍历,用level记录当前节点的层数,用last指向当前层的最右节点,若出队的元素等于last说明当前层遍历完毕且队尾元素是下一层的最右元素,使last指向它。
int Btdepth(BiTree T){
if(!T) return 0;
int front=0,rear=0; //front指向队首,rear指向队尾的后一个位置
int last=0,level=0; //last指向当前层的最右节点
BiTree Q[MaxSize];
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-1==last){ //刚出队的元素是否为当前层的最右节点节点
level++; //说明当前层的节点已经遍历完毕,进入下一层
last=rear-1; //更新last
}
}
return level;
}
递归实现:
int Btdepth(BiTree T){
if(!T){
return 0;
}
int ldep=Btdepth(T->left);
int rdep=Btdepth(T->right);
return (ldep>rdep?ldep:rdep)+1;
}