实验六 二叉树及其应用

实验介绍如何通过先序输入建立二叉链表结构的二叉树,并进行先序、中序、后序、层次遍历,同时涵盖二叉树高度和结点数的计算。此外,涉及Huffman编码和译码的应用,包括必做和选做题目,使用Dev C++等编程环境。
摘要由CSDN通过智能技术生成

1.目的要求:

(1) 通过实验,掌握二叉树的两种基本的存储结构及二叉树的建立、遍历(先序、中序、后序、层次遍历),并加以应用(计算二叉树的高度、统计结点数目等)。

(2) Huffman编码和译码。

2.实验内容:

(1) 按先序次序输入二叉树中结点的值,建立一棵以二叉链表作存储结构的二叉树,然后按先序、中序、后序、层序遍历这棵二叉树,并完成二叉树的相应信息的统计(如各种结点数目、二叉树的深度等);

(2) 建立一棵二叉排序树,并对其遍历、结点统计、深度计算、数据查找等。

(3) 设计一个完整的编码系统:针对一篇文档,统计各个字符的出现次数,并为其设计Huffman编码,然后进行译码。

注:(1)~(2)为必做题,(3)为选做题。

3.主要仪器设备及软件

(1) PC机

(2) Dev C++ ,Visual C++, VS2010等


代码

1)

/*
方式: 
    扩充二叉树建立 
样例:
    先序建立:AB#D##C##
涉及:
    二叉树的建立 先序 中序 后序
	二叉树的遍历 先序 中序 后序 层序
	二叉树的高度
*/
#include<cstdio>
#include<iostream>
#include<malloc.h>
#include<queue>

using namespace std;

typedef struct Node *T;
struct Node{
   
	char data;
    struct Node* Lchild;
	struct Node* Rchild;
};
std::queue<T> q;

//先序建立 
T preorder_create(T root)
{
   
	char ch;
	cin>>ch;
	if(ch=='#') root=NULL;

	else{
   
		root=(T)malloc(sizeof(struct Node));
	    root->data=ch;
	    root->Lchild=preorder_create(root->Lchild);	
        root->Rchild=preorder_create(root->Rchild);	
	} 
	return root;
}
//中序建立
T inorder_create(T root)
{
   
	char ch;
	cin>>ch;
	if(ch=='#') root=NULL;

	else{
   
		root=(T)malloc(sizeof(struct Node));
	    root->Lchild=preorder_create(root->Lchild);
		root->data=ch;	
        root->Rchild=preorder_create(root->Rchild);	
	} 
	return root;
}
//后序建立
T postorder_create(T root)
{
   
	char ch;
	cin>>ch;
	if(ch=='#') root=NULL;

	else{
   
		root=(T)malloc(sizeof(struct Node));
	    root->Lchild=preorder_create(root->Lchild);	
        root->Rchild=preorder_create(root->Rchild);
		root->data=ch;	
	} 
	return root;
} 

//先序遍历 
void preorder_traversal(T root)
{
   
	if(root){
   
		cout<<root->data;
		preorder_traversal(root->Lchild);
		preorder_traversal(root->Rchild);
	}
}
//中序遍历
void inorder_traversal(T root)
{
   
	if(root){
   
		preorder_traversal(root->Lchild);
		cout<<root->data;
		preorder_traversal(root->Rchild);
	}
}
//后序遍历
void postorder_traversal(T root)
{
   
	if(root){
   
		preorder_traversal(root->Lchild);
		preorder_traversal(root->Rchild);
		cout<<root->data;
	}
}  

//层序遍历 
void level_traversal
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值