采用层次遍历,用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;
}
本文介绍了一种通过层次遍历算法求解二叉树深度的方法,并提供了非递归和递归两种实现方式。非递归方法利用队列记录节点的层次信息,递归方法则直接比较左右子树的深度。
228

被折叠的 条评论
为什么被折叠?



