实验6:树和二叉树的实验2

匿名 (未验证) 提交于 2019-12-03 00:19:01

一、实验目的

1、熟练理解树和二叉树的相关概念,掌握的存储结构和相关操作实现;

2、掌握树的顺序结构的实现;

3、 学会运用树的知识解决实际问题

 

二、实验内容

1、自己确定一个二叉树(树结点类型、数目和结构自定)利用链式存储结构方法存储。实现树的构造,并完成:

1) 用前序遍历、中序遍历、后序遍历输出结点数据;

2) 以合理的格式,输出各个结点和双亲、孩子结点信息;

3)输出所有的叶子结点信息;

 

2、试设计一个程序,将输入的字符串转化为对应的哈夫曼编码,然后再将这个哈夫曼编码序列进行解码,也就是恢复原来的字符串序列。(*)

三、实验步骤

1、依据实验内容,先确定具体的二叉树,并说明结点的数据类型;

2、设计具体的算法;

3、写出完整程序;

4、总结、运行结果和分析算法效率。

5、总体收获和不足,疑问等。

 

四、实验要求

1、按照数据结构实验任务书,提前做好实验预习与准备工作。

2、在个人主页上发文章提交作业。

3、 实验课会抽查3-5人,希望你可以被查到!


#ifndef bitree_H #define bitree_H const int MaxSize=10; struct binode { 	char data; 	binode *l,*r; }; class Bitree { public: 	Bitree(){root=creat(root);}  	~Bitree(){release(root);} 	void preorder(){preorder(root);} 	void inorder(){inorder(root);} 	void postorder(){postorder(root);} 	void print(){print(root,NULL);}						//输出 双亲、孩子信息 	void printleaf(){printleaf(root);}			//输出叶子信息 	void count(){count(root);}						//统计结点数 private: 	char data[MaxSize]; 	int length; 	binode *root; 	binode *creat(binode *bt); 	void release(binode *bt); 	void preorder(binode *bt); 	void inorder(binode *bt); 	void count(binode *bt);  	void postorder(binode *bt); 	void print(binode *bt,binode *pr);						//输出 双亲、孩子信息 	void printleaf(binode *bt);					//输出叶子信息  }; #endif  #include<iostream> using namespace std; #include"bitree.h" int count=0;  binode *Bitree::creat(binode *bt) { 	char ch; 	cout<<"请输入创建一棵二叉树的结点数据"<<endl; 	cin>>ch; 	if(ch=='#')return NULL; 	else{ 		bt=new binode; 		bt->data=ch; 		bt->l=creat(bt->l); 		bt->r=creat(bt->r); 	} 	return bt; }  void Bitree::release(binode *bt) { 	if(bt!=NULL) 	{ 		release(bt->l); 		release(bt->r); 		delete bt; 	} }  void Bitree::preorder(binode *bt) { 	if(bt==NULL)return; 	else{ 		cout<<bt->data<<" "; 		preorder(bt->l); 		preorder(bt->r); 	} }  void Bitree::inorder(binode *bt) { 	if(bt==NULL)return; 	else{ 		inorder(bt->l); 		cout<<bt->data<<" "; 		inorder(bt->r); 	} }  void Bitree::postorder(binode *bt) { 	if(bt==NULL) return ; 	else{ 		postorder(bt->l); 		postorder(bt->r); 		cout<<bt->data<<" "; 	} } void Bitree::count(binode *bt) { 	if(bt!=NULL) 	{ 		count(bt->l); 		count++; 		count(bt->r); 		cout<<count<<" "; 	} }  void Bitree::print(binode *bt,binode *pr) { 	if(bt!=NULL)	 	{ 		cout<<"结点为:"<<bt->data<<endl; 		if(bt->l!=NULL) 			cout<<"结点的左孩子为:"<<bt->l->data<<endl; 		else 			cout<<"该结点无左孩子."<<endl; 		if(bt->r!=NULL) 			cout<<"结点的右孩子为:"<<bt->r->data<<endl; 		else 			cout<<"该结点无右孩子."<<endl; 		if(pr!=NULL) 			cout<<"该结点的双亲为:"<<pr->data<<endl; 		else 			cout<<"该结点无双亲."<<endl; 		print(bt->l,bt); 		print(bt->r,bt); 	} } }    void Bitree::printleaf(binode *bt) { 	if(bt!=NULL) 	{ 		if(bt->l==NULL&&bt->r==NULL) 		{ 			cout<<bt->data<<endl; 			printleaf(bt->l); 			printleaf(bt->r); 	}   }   #include <iostream> using namespace std; #include "bitree.h"  int main() { 	Bitree T; 	cout<<"------前序遍历------"<<endl; 	T.preorder(); 	cout<<endl; 	cout<<"------中序遍历------"<<endl; 	T.inorder(); 	cout<<endl; 	cout<<"------后序遍历------"<<endl; 	T.postorder(); 	cout<<endl; 	cout<<"------孩子双亲------"<<endl; 	T.print(); 	cout<<endl; 	cout<<"------叶子结点------"<<endl;    	T.printleaf();      	cout<<endl;   	return 0; } 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!