首页 > 其他分享 >基础实验4-2.2 列出叶结点

基础实验4-2.2 列出叶结点

时间:2024-08-04 16:54:18浏览次数:13  
标签:结点 struct int Queue MaxSize Front 2.2 ElementType 列出

对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶结点。

输入格式:

首先第一行给出一个正整数 n(≤10),为树中结点总数。树中的结点从 0 到 n−1 编号。随后 n 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。

输出格式:

在一行中按规定顺序输出叶结点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6

输出样例:

4 1 5

代码实现

 

#include<stdio.h> 
#include<stdlib.h> 
#define MAXN 10
#define Tree int
#define Null -1//表示左右儿子为空的情况 
struct TreeNode{
	Tree left;
	Tree right;
};
struct TreeNode T1[MAXN];

typedef enum { false, true } bool;
typedef Tree ElementType;//树的节点编号放入队列 

/*-----队列的定义-----*/
typedef int Position;
typedef struct QNode *PtrToQNode;
struct QNode {
	ElementType *Data;
	Position Front, Rear;
	int MaxSize;
};
typedef PtrToQNode Queue;

Queue CreateQueue( int MaxSize );
bool IsEmptyQ( Queue Q );
void AddQ( Queue Q, ElementType X );
ElementType DeleteQ( Queue Q );
/*-----队列的定义结束-----*/


//===============队列操作------------------------ 
Queue CreateQueue( int MaxSize )
{
	Queue Q = (Queue)malloc(sizeof(struct QNode));
	Q->Data = (ElementType *)malloc(MaxSize * sizeof(ElementType));
	Q->Front = Q->Rear = 0;
	Q->MaxSize = MaxSize;
	return Q;
}

bool IsEmptyQ( Queue Q )
{
	return (Q->Front == Q->Rear);
}

void AddQ( Queue Q, ElementType X )
{ /* 简版入列,不检查队列满的问题 */
	Q->Rear = (Q->Rear+1)%Q->MaxSize;
	Q->Data[Q->Rear] = X;
}

ElementType DeleteQ( Queue Q )
{ /* 简版出列。不检查队列空的问题 */
	Q->Front =(Q->Front+1)%Q->MaxSize;
	return  Q->Data[Q->Front];
}

//------------树的构造----------------- 
Tree buildTree(struct TreeNode T[]) {
	char cl,cr;
	int root;//数根 
	int n,i,check[MAXN];//用于寻找树的根节点 
	scanf("%d\n",&n);
	
	if(n){
		for(i=0;i<n;i++)
			check[i]=0; 
		for(i=0;i<n;i++){
			scanf("%c %c\n",&cl,&cr);
			if(cl!='-'){
				T[i].left=cl-'0';
				check[T[i].left]=1;
			}else
				T[i].left=Null;
			if(cr!='-'){
				T[i].right=cr-'0';
				check[T[i].right]=1;
			}else
				T[i].right=Null;
		}
		
		for(i=0;i<n;i++)
			if(!check[i])
				break;
		root=i;
		return root;	 
	}
	return Null;//n为0情况,根节点就返回-1 
	
}
//--------------------树层序遍历-------------
void levelOrderTraversal(Tree t){
	
	Queue q;
	Tree tmp;
	int flag=0;//用于区别收尾输出的空格 
	if(t==-1)
		return;
	q=CreateQueue(MAXN);
	AddQ(q,t);
	while(!IsEmptyQ(q)){
		tmp=DeleteQ(q);
		if(T1[tmp].left==Null&&T1[tmp].right==Null)//只输出叶节点
			if(!flag){//首次输出 
				printf("%d",tmp);
				flag=1;
			}else
				printf(" %d",tmp);
		
		if(T1[tmp].left!=Null)//有左孩子,就加入队列,等待下一层遍历
			AddQ(q,T1[tmp].left);
		if(T1[tmp].right!=Null)//有左孩子,就加入队列,等待下一层遍历
			AddQ(q,T1[tmp].right);
	}
	
}

int main(){
	Tree root = buildTree(T1);
	
	levelOrderTraversal(root);
	
	
	return 0;
}

标签:结点,struct,int,Queue,MaxSize,Front,2.2,ElementType,列出
From: https://blog.csdn.net/qq_33811080/article/details/140908127

相关文章

  • windows11系统NVIDIA显卡驱动自动升级导致2070 Super显卡失效 —— 552.22版本自动升
    操作系统Windows11,旧版本显卡驱动是552.22,由于安装的是NVIDIAGeforceExperience后显卡驱动自动升级到560.77版本,然后显卡不再工作。重新安装显卡驱动560.77版本显示window11版本操作系统不支持该版本显卡驱动,所以这说明虽然官网上说这个版本的显卡驱动是支持window11的,而且Ge......
  • leetcode 021:删除链表的倒数第 N 个结点
    LCR021.删除链表的倒数第N个结点给定一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。示例1:输入:head=[1,2,3,4,5],n=2输出:[1,2,3,5]示例2:输入:head=[1],n=1输出:[]示例3:输入:head=[1,2],n=1输出:[1]structListNode*removeNthF......
  • leetcode 2181.合并零之间的结点
    1.题目要求:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*mergeNodes(structListNode*head){structListNode*cur=head;intcount=0;//1.遍历结......
  • leetcode 2181.合并零之间的结点
    1.题目要求:/***Definitionforsingly-linkedlist.*structListNode{*intval;*structListNode*next;*};*/structListNode*mergeNodes(structListNode*head){structListNode*cur=head;intcount=0;//1.遍历结......
  • 【闲话】08.02.24
    0802闲话头图:今日推歌:《レディメイドfeat.Ado》すりぃ123で弾け飛んだ一、二、三绽破而飞固定観念バットで打って固定概念用球棒击碎どうだい?どうだい?如何如何楽ならまっいっか觉得快乐的话就无所谓啦我还是现充的时候就喜欢上这首歌了,,,看到自己去年说......
  • vscode在WSL Ubuntu 18.04下使用,GLIBC_2.28问题
    vscode1.85是可以在Ubuntu18.04用的,后面的版本就会报这个问题。报错信息:/home/alex/.vscode-server/bin/f1e16e1e6214d7c44d078b1f0607b2388f29d729/node:/lib/x86_64-linux-gnu/libc.so.6:version`GLIBC_2.28'notfound(requiredby/home/alex/.vscode-server/bin/f1e16......
  • 吴恩达深度学习deeplearning.ai学习笔记(一)2.1 2.2 2.3 2.4
    2.1逻辑分类/二元分类 logisticregression经典问题:假如你有一张图片作为输入,你想输出能识别此图的标签,也就是:如果是猫,输出1;如果不是猫,输出0。这是老吴最喜欢的猫检测器;我们用y来表示输出的结果标签;一张图片在计算机中是如何表示的?计算机保存一张图片,要保存三个独立矩阵,分......
  • Openfiles /?     允许管理员列出系统上已打开的文件和文件夹或与其断开连接。
     openfiles|MicrosoftLearn 信息:需要启动系统全局标志“维护对象列表”才能查看   本地打开的文件。   请参阅Openfiles/?以获得详细信息。通过本地共享点远程打开的文件:---------------------------------------------信息:没有找到打开的共享文件......
  • Metasploit Pro 4.22.2-2024072501 (Linux, Windows) - 专业渗透测试框架
    MetasploitPro4.22.2-2024072501(Linux,Windows)-专业渗透测试框架Rapid7Penetrationtesting,releaseJul25,2024请访问原文链接:https://sysin.org/blog/metasploit-pro-4/,查看最新版。原创作品,转载请保留出处。世界上最广泛使用的渗透测试框架知识就是力量,尤其是......
  • Spring Boot从 2.2.5升级到2.7.2之后,一堆BUG
    SpringBoot从2.2.5升级到2.7.2之后,一堆BUG这篇文章分享一下SpringBoot升级到2.7的踩坑总结,还是挺全面的,希望对大家有所帮助~说明2.7.2为2.x的最后一个稳定版本。3开始最低要求Java17,所以暂时不到3.x。以下的处理方法主要针对我们的项目,可能并不通用。1、hibernate-......