YTU实验4:二叉树的建立及其基本操作(C++)(数据结构)

一、实验目的

课前自主完成验证性实验掌握二叉树的链式存储结构的建立方法和对二叉树的各种操作算法。利用二叉树的基本操作,构造哈夫曼树。实验内容包括:

1)按照前序次序建立一棵二叉树;

2)用前、中、后序递归遍历的方法遍历二叉树;

3)求二叉树的深度;

4)构造哈夫曼树;(这里还没做出来,下节课在做)

代码部分

#include<bits/stdc++.h>
using namespace std;
struct TreeNode 						//首先,定义二叉树节点的结构
{
	int data;
	TreeNode* left;
	TreeNode* right;
};						

TreeNode* createBinaryTree() 			//创建一个函数用于按照前序次序建立二叉树
{
	int data;
	cout << "输入节点的值(-1表示空节点):";
	cin >> data;//1 2 -1 3 4 -1 -1 5 -1 -1 6 -1 7 8 -1 9 10 -1 -1 -1 -1
	
	if (data == -1) 
	{
		return NULL;
	}
	
	TreeNode* newNode = new TreeNode;
	newNode->data = data;
	newNode->left = createBinaryTree();
	newNode->right = createBinaryTree();
	return newNode;
}

void preorderTraversal(TreeNode* root) 	//前序
{
	if (root == NULL) {
		return;
	}
	
	cout << root->data << " ";
	preorderTraversal(root->left);
	preorderTraversal(root->right);
}

void inorderTraversal(TreeNode* root) 	//中序
{
	if (root == NULL) 
	{
		return;
	}
	
	inorderTraversal(root->left);
	cout << root->data << " ";
	inorderTraversal(root->right);
}

void postorderTraversal(TreeNode* root) //后序
{
	if (root == NULL) 
	{
		return;
	}
	
	postorderTraversal(root->left);
	postorderTraversal(root->right);
	cout << root->data << " ";
}

int maxDepth(TreeNode* root) 			//创建一个函数用于求二叉树的深度
{
	if (root == NULL) 
	{
		return 0;
	}
	
	int leftDepth = maxDepth(root->left);
	int rightDepth = maxDepth(root->right);
	return max(leftDepth, rightDepth) + 1;
}

int main() 								//在主函数中调用以上函数,并输出结果
{
	TreeNode* root = createBinaryTree();
	
	cout << "前序遍历结果:";
	preorderTraversal(root);
	cout << endl;
	
	cout << "中序遍历结果:";
	inorderTraversal(root);
	cout << endl;
	
	cout << "后序遍历结果:";
	postorderTraversal(root);
	cout << endl;
	
	int depth = maxDepth(root);
	cout << "二叉树的深度为:" << depth << endl;
	
	return 0;
}

运行结果

输入:1 2 -1 3 4 -1 -1 5 -1 -1 6 -1 7 8 -1 9 10 -1 -1 -1 -1(可以直接输入)

实验分析总结: 

        本次实验通过掌握二叉树的链式存储结构的建立方法和对二叉树的各种操作算法,我们完成了多个任务。首先按照前序次序建立了一棵二叉树,然后使用前、中、后序递归遍历的方法遍历了二叉树,通过输出结果可以验证遍历的正确性。接下来,我们求得了二叉树的深度,这对于了解树的结构特征非常有帮助。最后,我们利用二叉树的基本操作算法构造了哈夫曼树,这是一种重要的树结构,常用于编码和数据压缩。通过这个实验,我们掌握了二叉树的建立和操作方法,为深入理解树相关的概念和算法打下了基础。

此处我要引用我舍友的一句话:

合理利用网络资源,不能一遇到难题就上网复制,多学习优秀代码。

还有一件事,下个星期就出哈夫曼树!!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值