二叉树采
【摘要】 @TOC 1.编写算法实现二叉树T的按层遍历。(二叉树采用二叉链表存储)#define OK 1#define ERROR 0typedef int Status;//-------------------二叉链表的存储表示--------------------typedef struct BiTNode{ TElemType data; struct BiTNode *lchi...
@TOC
1.编写算法实现二叉树T的按层遍历。(二叉树采用二叉链表存储)
#define OK 1
#define ERROR 0
typedef int Status;
//-------------------二叉链表的存储表示--------------------
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchile, *rchild;
}BiTNode, *BiTree;
//-------------------算法描述------------------------------------
Status LayerTraverse(BiTree T, Status (*visit)(TElemType e)){ //按层遍历二叉链表T。
if(!T) return OK;
InitQueue(Q);
EnQueue(Q,T);
while(!QueueEmpty(Q))
{
DeQueue(Q,p);
if(!(*visit)(p->data)) return ERROR;
if(p->lchild) EnQueue(Q,p->lchild);
if(p->rchild) EnQueue(Q,p->rchild);
}
return OK;
}//LayTraverse
2.编写算法实现对二叉树T交换左右子树的操作。(二叉树采用二叉链表存储) 参考算法: 符号常量和类型的定义及二叉链表的存储表示如 1题。
Status Exchange(Bitree &T)
{
if(!T) return OK;
p=T->lchild; T->lchild=T-rchild; T->rchild=p;
Exchange(T->lchild);
Exchange(T->rchild);
return OK;
}//Exchange
3.编写算法实现统计并返回二叉树T的叶子结点的数目的操作。(二叉树采用二叉链表存储) 参考算法: 符号常量和类型的定义及二叉链表的存储表示如第1题。
int Countleaf(Bitree T)
{
if(!T) return 0;
if(T->lchild==NULL&&T->rchild==NULL) return 1;
return(Countleaf(T->lchild)+Countleaf(T->rchild));
}
4.编写算法实现计算并返回二叉树T的深度。(二叉树采用二叉链表存储) 参考算法: 符号常量和类型的定义及二叉链表的存储表示如第1题
int BitreeDepth(BiTree T)
{
if(!T)
return 0;
else{
left=BitreeDepth(T->lchild);
right=BitreeDepth(T->rchild);
return( left>right?left+1:right+1);
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)