利用链式存储结构的简单二叉树的建立与先中后序遍历该二叉树(C++小白版)

这篇博客介绍了一种手动构建二叉树的方法,通过C++代码展示了如何分配节点空间并设置节点关系。作者强调了这个例子的重要性,因为它帮助理解二叉树的结构。此外,还提供了先序、中序和后序遍历的函数实现,以便展示二叉树的遍历过程。代码运行后,输出了三种遍历方式的结果。
摘要由CSDN通过智能技术生成

 这是一种简单的方法,没有用到递归建树,主要是感受二叉树如何建立,各节点关系如何去设置,当时上数据结构的时候,老师不教怎么写代码,期末又考代码,自己又是转专业过来的课业繁重一周七天课,没时间好好复习这门大课,因此课程结束成绩很低,于是趁着这个寒假赶紧补一补数据结构,不然考研真得考个寂寞了。

#include<iostream>
using namespace std;
typedef int ElementType;

typedef struct BiTNode {
	ElementType data;
	struct BiTNode* lchild,*rchild;
}BinTNode,*BinTree;


//这里我将采取最简单的建立方式,由多少个节点就先申请多少个空间
BinTree create_BinTree()
{
	BinTree node1 = (BinTree)malloc(sizeof(BinTNode));
	node1->data = 1;   //我们为node1申请了空间,并对它的data赋值了
	BinTree node2 = (BinTree)malloc(sizeof(BinTNode));
	node2->data = 2;  //我们为node2申请了空间,并对它的data赋值了
	BinTree node3 = (BinTree)malloc(sizeof(BinTNode));
	node3->data = 3;  //我们为node3申请了空间,并对它的data赋值了
	BinTree node4 = (BinTree)malloc(sizeof(BinTNode));
	node4->data = 4; //我们为node4申请了空间,并对它的data赋值了
	BinTree node5 = (BinTree)malloc(sizeof(BinTNode));
	node5->data = 5; //我们为node5申请了空间,并对它的data赋值了
	BinTree node6 = (BinTree)malloc(sizeof(BinTNode));
	node6->data = 6; //我们为node6申请了空间,并对它的data赋值了

	//以上我们申请了6个节点并对其赋予了图对应的值,接下来看看这六个节点的关系,并为了安全防止程序乱输出,要将没有左右孩子的节点的对应指针赋为NULL;
	//由图观察node1,左孩子为node2,右孩子为node3
	node1->lchild = node2;
	node1->rchild = node3;
	//由图观察node2,没有左孩子,赋为NULL,右孩子为node4
	node2->lchild = NULL;
	node2->rchild = node4;
	//由图观察node3,没有左孩子,赋为NULL,右孩子为node5
	node3->lchild = NULL;
	node3->rchild = node5;
	//由图观察node4,左孩子为node6,无右孩子,赋为NLLL;
	node4->lchild = node6;
	node4->rchild = NULL;
	//由图观察node5,既没有左孩子又没有右孩子,赋为NULL
	node5->lchild = NULL;
	node5->rchild = NULL;
	//由图观察node6,既没有左孩子又没有右孩子,赋为NULL
	node6->lchild = NULL;
	node6->rchild = NULL;

	return node1;  //这里返回node1的原因是,它是这幅图的根节点
}

//建立先序遍历二叉树函数,先序遍历的思想就是先遍历左子树输出,再遍历右子树输出
void PreOrder(BinTree T)
{
	if (T != NULL)    //如果该节点不为NULL
	{
		cout << T->data << " ";
		PreOrder(T->lchild);
		PreOrder(T->rchild);
	}
}

void InOrder(BinTree T)
{
	if (T != NULL)    //如果该节点不为NULL
	{
		InOrder(T->lchild);
		cout << T->data << " ";
		InOrder(T->rchild);
	}
}

void PostOrder(BinTree T)
{
	if (T != NULL)    //如果该节点不为NULL
	{
		PostOrder(T->lchild);
		PostOrder(T->rchild);
		cout << T->data << " ";
	}
}


int main()
{
	BinTree root = (BinTree)malloc(6*sizeof(BinTNode)); //这里乘以6是因为我的二叉树总共有6个节点,所以对于根节点要申请6个同样大小空间的节点或者更大,反正要大于二叉树所有节点的个数
	root = create_BinTree();               //调用函数创建该二叉树
	cout << "先序遍历的结果是:";
	PreOrder(root);
	cout << endl;

	cout << "中序遍历的结果是:";
	InOrder(root);
	cout << endl;

	cout << "后序遍历的结果是:";
	PostOrder(root);
	cout << endl;

}

输出结果为:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值