[数据结构]树和二叉树习题

举报
开心星人 发表于 2022/06/30 00:28:55 2022/06/30
3.8k+ 0 0
【摘要】 🌳一: 给定二叉树的两种遍历序列,分别是: 前序遍历序列:D,A,C,E,B,H,F,G,I; 中序遍历序列:D,C,B,E,H,A,G,I,F, 试画出二叉树B。 🌳二、 ...

🌳一:

给定二叉树的两种遍历序列,分别是: 前序遍历序列:D,A,C,E,B,H,F,G,I; 中序遍历序列:D,C,B,E,H,A,G,I,F,
试画出二叉树B。

在这里插入图片描述

🌳二、

已知一棵有2011个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点个数是

在这里插入图片描述
链接

🌳三、

编写按层次顺序(同一层自左至右)遍历二叉树的算法。

思路:
1、使用队列,从根结点开始,将根结点入队
2、判断队头元素是否有左孩子,若有,将左孩子入队;判断队头元素是否有右孩子,若有,将右孩子入队
3、队头元素出队
4、重复2和3,直到队列为空

出队顺序即为层序遍历

string LevelOrder(BiTree T){
	Queue Q;
	InitQueue(Q);
	string res="";
	BiTree temp;  //用来保存出队结点
	if(T){    //如果二叉树非空
		EnQueue(Q,T);
		while(!QueueEmpty(Q)){
			DeQueue(Q,temp);
			res+=temp->data;
			if(temp->lchild){
				EnQueue(Q,temp->lchild);
			}
			if(temp->rchild){
				EnQueue(Q,temp->rchild);
			}
		}
		return res;
	}
	return "";
}	

  
 

🌳四、

编写算法判别给定二叉树是否为完全二叉树。

思路:

根据完全二叉树的定义,对完全二叉树按照从上到下、从左到右的层次遍历,应该满足一下两条要求:

  • 某节点没有左孩子,则一定无右孩子
  • 若某节点缺左或右孩子,则其所有后继一定无孩子

若不满足上述任何一条,均不为完全二叉树。

bj变量值表示迄今为止所有节点均有左右孩子(其初值为1),一旦发现一个节点没有左孩子或没有右孩子时置bj为0)

int IsCompleteTree(BiTree T){
	Queue Q;
	InitQueue(Q);
	int bj=1;
	BiTree temp;  //用来保存出队结点
	if(T){  //如果二叉树非空
		EnQueue(Q,T);
		while(!QueueEmpty(Q)){
			DeQueue(Q,temp);
			if(temp->lchild==NULL){  //没有左孩子
				bj=0;
				if(temp->rchild!=NULL)  //有右孩子
					return 0;  //则不满足完全二叉树第一个要求
				}
			}
			else{  //有左孩子
				if(bj==1){  //迄今为止,所有节点均有左右孩子
					EnQueue(Q,temp->lchild);  //左孩子入队
					if(temp->rchild==NULL){  //没有右孩子
						bj=0;
					}
					else{  //有右孩子
						EnQueue(Q,temp->rchild);
					}
				}
			}
				else
					return 0;
			}
		}
	}
	return 1;
}		

  
 

文章来源: blog.csdn.net,作者:开心星人,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/qq_55675216/article/details/124526113

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

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

    全部回复

    上滑加载中

    设置昵称

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

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

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