//递归
int search_btDepthRecursion(LINKBINTREE *bTree)
{
// 返回最大深度,递归算法
if(!bTree)
return 0;
return (search_btDepthRecursion(bTree->lchild)>search_btDepthRecursion(bTree->rchild)?search_btDepthRecursion(bTree->lchild):search_btDepthRecursion(bTree->rchild))+1;
}
//非递归
int search_btDepth(LINKBINTREE *bTree)
{
if(bTree)
{
int front = 0,rear = 0,level,depth = 0;//利用队列容易实现
LINKBINTREE *p,*queue[MAXSIZE],*head = bTree;
rear = (rear+1)%MAXSIZE;
queue[rear] = bTree;//首节点先入队
level = rear;
while(rear!=front)
{
front = (front+1)%MAXSIZE;
p = queue[front];//出队
if(p->lchild){
// 遍历左子树
rear = (rear+1)%MAXSIZE;
queue[rear] = p->lchild;
}
if(p->rchild){
// 遍历右子树
rear = (rear+1)%MAXSIZE;
queue[rear] = p->rchild;
}
if(front==level)
{
// 每遍历完一层就depth+1
depth++;
level = rear;
}
}
return depth;
}else{
printf("bt empty!");
return;
}
}
c语言:计算二叉树的深度递归、非递归算法
最新推荐文章于 2023-05-14 14:28:19 发布