求二叉树高度和宽度

以二叉链表为存储结构,分别写出求二叉树高度及宽度的算法。所谓宽度是指在二叉树的各层上,具有结点数最多的那一层上的结点总数。

标准答案:
①求树的高度

Int Depth(BinTree *T)
{
int dep1,dep2;
if(T==Null) return(0);
else
{
dep1=Depth(T->lchild);
dep2=Depth(T->rchild);
if(dep1>dep2) return(dep1+1);
else return(dep2+1);
}

 

②求树的宽度
思想:按层遍历二叉树,采用一个队列q,让根结点入队列,最后出队列,若有左右子树,则左右子树根结点入队列,如此反复,直到队列为空。

 

int Width(BinTree *T)
{
int
front=-1,rear=-1;
/*队列初始化*/ int flag=0,count=0,p;
/* p用于指向树中层的最右边的结点,标志flag记录层中结点数的最大值。*/
if(T!=Null) { rear++; q[rear]=T; flag=1; p=rear; } while(front<p) { front++; T=q[front]; if(T->lchild!=Null) { rear++; q[rear]=T->lchild; count++; } if(T->rchild!=Null) { rear++; q[rear]=T->rchild; count++; } if(front==p) /* 当前层已遍历完毕
*/ { if(flag<count) flag=count; count=0; p=rear; /* p指向下一层最右边的结点*/ } } /* endwhile*/ return(flag); }

 

转载于:https://www.cnblogs.com/danielrocks/p/3370078.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值