0
点赞
收藏
分享

微信扫一扫

【数据结构试验】树的基本操作

北邮郭大宝 2022-04-29 阅读 128

实验五 树的基本操作

1.实验目的:

熟悉树的基本定义,树的存储方式、建立方法及相关基本操作,能够根据实际情况选择合适的存储结构。

2.实验内容:

以二叉链表作存储结构,试编写前序、中序、后序遍历二叉树的算法。

3.正文部分

①什么是树?

一种非线性结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。这个数据结构的形状看起来像一颗叶子朝下倒挂的树。

  • 根节点:没有父节点的结点成为根节点。
  • 叶节点:没有子节点的结点称为叶子结点。

②什么是二叉树?

一颗二叉树是结点的一个有限集合,该集合或者为空,或者是一个根节点加上两颗别称为左子树和右子树的二叉树组成

二叉树的特点:

1.每个节点最多有两颗子树,即二叉树不存在大于2的结点。

2.二叉树的子树有左右之分,其子树的次序不能颠倒。

③先序遍历

先访问根节点,然后再访问左子树,最后再访问右子树。

根据题目的要求,我们需要通过动态内存开辟的空间去存储。

根据先序的特点,如果我们的头结点为空的话,那么我们就可以直接返回空。

否则我们就要将该节点的值插入二叉树,再去访问左子树和右子树。

image-20220429210411834

④中序遍历

先访问左子树,然后再访问根节点,最后再访问右子树。

image-20220429210213787

⑤后序遍历

先访问左子树,然后再访问右子树,最后再访问根节点。

image-20220429210306747

#include<iostream>
using namespace std;

struct Node {
	char data;//储存数据
	Node* L_child;//左孩子
	Node* R_child;//右孩子
};

//先序遍历建立二叉链表
void Create_BT(Node*& p)
{
	char ch;
	cin >> ch;//输入数据
	if (ch == '#')
		p = NULL;
	else {
		p = new Node;
		p->data = ch;
		Create_BT(p->L_child);//左子树递归
		Create_BT(p->R_child);//右子树递归
	}
}
//先序遍历
void POD(Node* p)
{
	if (p != NULL) {
		cout << p->data;//访问根节点
		POD(p->L_child);//左子树递归遍历
		POD(p->R_child);//右子树递归遍历
	}
}
//中序遍历
void IOD(Node* p)
{
	if (p != NULL) {
		IOD(p->L_child);//左子树递归遍历
	    cout << p->data;//访问根节点
		IOD(p->R_child);//右子树递归遍历
	}

}
//后序遍历
void PoOD(Node* p)
{
	if (p != NULL) {
		PoOD(p->L_child);//左子树递归遍历
		PoOD(p->R_child);//右子树递归遍历
		cout << p->data;//访问根节点
	}
}

int main()
{
	Node* root;//建立根结点
	Create_BT(root);
	cout << "先序遍历:";
	POD(root);
	cout << endl;

	cout << "中序遍历:";
	IOD(root);
	cout << endl;

	cout << "后序遍历:";
	POD(root);
	cout << endl;
	return 0;
}
举报

相关推荐

0 条评论