以二叉链表为存储结构,写出求二叉树高度和宽度的算法

来源:百度知道 编辑:UC知道 时间:2024/09/24 15:23:49
所谓宽度是指在二叉树的各层上具有节点数最多的那一层上的节点总数!
我想得到直接的答案,算法

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

标准答案:
①求树的高度
思想:对非空二叉树,其深度等于左子树的最大深度加1。
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

以二叉链为存储结构,写一算法求二叉树的叶子结点个数 设二叉树以二叉链表为存储结构,编写一个后续遍历二叉树的非递归算法 以二叉链表作为存储结构,是编写二叉树高度的算法? 用C语言编写:建立一棵以二叉链表结构存储的二叉树,并对其进行遍历。求该二叉树中的结点个数等操作。 以二叉链表存储结构,试编写非递归的前序遍历算法(c描述) 采用二叉链表存储结构,按前根序输入二叉树的结点序列,建立二叉树并中根序遍历该二叉树,计算叶子节点的个数 假设以二叉链表存储的二叉数中,每个结点所含数据结构元素均为单字母,试编写算法,按树状打印二叉树的算 利用二叉链表作为存储结构建立一棵二叉树,每个结点中存放一种水果名(由键盘输入),结点数不少于5个。 已知用二叉链表存储二叉树,判断两棵二叉树是否相等 二叉树 两种存储结构的优缺点