二叉树采

举报
笑霸final 发表于 2022/03/22 09:50:43 2022/03/22
【摘要】 @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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。