关于二叉树层序建立的一些思考(接上文)

文章介绍了如何使用C++实现二叉树的层序建立,通过自定义链式队列数据结构,以及层序遍历的代码。在层序建立过程中,从输入的字符序列创建二叉树,并提供了初始化队列、入队、出队等操作。由于队列结构的不同,直接应用前文的层序遍历代码会导致错误,需要适当修改。

接前文二叉树的层序建立与前、中、后、层序遍历代码

在前文中对二叉树的层序建立使用了辅助队列,但该队列与一般的队列数据结构有所不同,所以我就采用queue.h的操作方法对层序建立进行了修改
本文分为三个部分
//function2.h对树和队列的结构进行了描述
//queue2.cpp中包含了队列的操作函数
//main.cpp为层序遍历的代码

二叉树的层序建立

function2.h

#include<stdio.h>
#include<stdlib.h> 
typedef char ElemType;
typedef struct BiTNode{
	ElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

typedef struct LinkNode{
	ElemType data;//此处的data类型为char,与前文不同
	struct LinkNode *next;
}LinkNode;
typedef struct LinkQueue{
	LinkNode *front,*rear;
}LinkQueue;
void InitQueue(LinkQueue &Q);
bool IsEmpty(LinkQueue Q);
void EnQueue(LinkQueue &Q,ElemType x);
bool DeQueue(LinkQueue &Q,ElemType &x);

queue2.cpp

#include "function2.h"
void InitQueue(LinkQueue &Q)
{
	Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
	Q.front->next = NULL;
}
bool IsEmpty(LinkQueue Q)
{
	if(Q.front==Q.rear)
	{
		return true;
	}else
	{
		return false;
	}
}
void EnQueue(LinkQueue &Q,ElemType x)
{
	LinkNode *s = (LinkNode *)malloc(sizeof(LinkNode));
	s->data = x;
	s->next = NULL;
	Q.rear->next = s;
	Q.rear = s;
}
bool DeQueue(LinkQueue &Q,ElemType &x)
{
	if(Q.front==Q.rear)
	{
		return false;
	}
	LinkNode *p = Q.front->next;
	x = p->data;
	Q.front->next = p->next;
	if(Q.rear ==p)
	{
		Q.rear = Q.front;
	}
	free(p);
	return true;
}

main.cpp

#include "function2.h"

int main()
{
	BiTree T=NULL;//树的根节点 
	LinkQueue Q;
	InitQueue(Q);
	printf("请按层序结构输入树的内容:");
	char c;
	while(scanf("%c",&c))
	{
		if(c=='\n')
		{
			break;
		}
		EnQueue(Q,c);//将字符都入队 
	}
	BiTNode *pcur;//树的指针 
	while(!IsEmpty(Q))
	{
		BiTNode *pnew;// 新建一个树的结点 
		pnew = (BiTNode *)malloc(sizeof(BiTNode));
		pnew->lchild = NULL;
		pnew->rchild = NULL;
		DeQueue(Q,pnew->data);//将字符出队 
		if(T==NULL)
		{
			T = pnew;
			pcur = pnew;	
		}else if(pcur->lchild==NULL)
		{
			pcur->lchild = pnew;
		}else if(pcur->rchild==NULL)
		{
			pcur->rchild = pnew;
			pcur = pcur->lchild;
		}
	}
	return 0;
}

输入abcde为层序建立的内容
在这里插入图片描述

从调试结果可以看出,层序建立二叉树正确
在这里插入图片描述
进一步思考,如果直接用前文的层序遍历的代码,则会报错,因为前文对queue的结构定义与本文不同。在实际操作中,可以采用前文的数据结构的定义,然后对本文的代码略加修改,即可实现层序建树和遍历。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值