《数据结构》实验5
来源:互联网 发布:阿里数据银行如何使用 编辑:程序博客网 时间:2024/05/16 08:55
巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。
1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
实验内容
1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。
1.头文件:Bitree.h
#ifndef Bitree_h
#define Bitree_h
template<class T>
struct BTnode
{
T data;
BTnode<T>*lchild, *rchild;
};
template<class T>
class Bitree
{
public:
Bitree(){ root = create(root); }
~Bitree(){ release(root); }
void preorder(){ preorder(root); }
void inorder(){ inorder(root); }
void postorder(){ postorder(root); }
private:
BTnode<T> *root;
BTnode<T> *create(BTnode<T>*bt);
void release(BTnode<T>*bt);
void preorder(BTnode<T>*bt);
void inorder(BTnode<T>*bt);
void postorder(BTnode<T>*bt);
};
template<class T>
BTnode<T> *Bitree<T>::create(BTnode<T> *bt) //构造函数
{
char ch;
cout << "输入创建二叉树的结点数据:";
cin >> ch;
if (ch == '#' || ch == '*') return NULL;
else
{
bt = new BTnode<T>;
bt->data = ch;
bt->lchild = create(bt->lchild);
bt->rchild = create(bt->rchild);
}
return bt;
}
template<class T>
void Bitree<T>::preorder(BTnode<T> *bt)//前序遍历
{
if (bt == NULL) return;
else
{
cout << bt->data;
preorder(bt->lchild);
preorder(bt->rchild);
}
}
template<class T>
void Bitree<T>::inorder(BTnode<T> *bt) //中序遍历
{
if (bt == NULL) return;
else
{
inorder(bt->lchild);
cout << bt->data;
inorder(bt->rchild);
}
}
template<class T>
void Bitree<T>::postorder(BTnode<T> *bt) //后序遍历
{
if (bt == NULL) return;
else
{
postorder(bt->lchild);
postorder(bt->rchild);
cout << bt->data;
}
}
template < class T >
void Bitree<T>::release(BTnode<T> *bt) //析构函数
{
if (bt != NULL)
{
release(bt->lchild);
release(bt->rchild);
delete bt;
}
}
#endif
2.源文件.cpp
#include<iostream>
#include"Bitree.h"
#include<stdlib.h>
using namespace std;
int main()
{
cout << "创建一棵二叉树:" << endl;
Bitree<char> T;
int choose = 0;
system("pause");
system("cls");
while (1)
{
cout << "(1).前序遍历" << endl;
cout << "(2).中序遍历" << endl;
cout << "(3).后序遍历" << endl;
cout << "(0).退出" << endl;
cout << "请输入相应的功能编号:";
cin >> choose;
if (choose == 0) break;
switch (choose)
{
case 1:
cout << "前序遍历的结果是:";
T.preorder();
cout << endl;
break;
case 2:
cout << "中序遍历的结果是:";
T.inorder();
cout << endl;
break;
case 3:
cout << "后序遍历的结果是:";
T.postorder();
cout << endl; break;
default:
break;
}
}
system("pause");
return 0;
}
- 《数据结构实验5》--排序
- 《数据结构》实验5
- 数据结构实验5-2
- 数据结构实验5-递归
- 数据结构实验
- 数据结构实验
- 数据结构实验
- 《数据结构编程实验》 2.4.5MANAGER
- 《数据结构》实验一 实验报告
- 数据结构 实验一实验报告
- 数据结构实验一 实验报告
- 《数据结构》:实验 线性表实验
- 实验报告--数据结构实验一
- 数据结构实验一(实验报告)
- 《数据结构实验一》实验报告
- 数据结构实验2
- 再做数据结构实验
- 数据结构实验的代码
- Activiti工作流引擎使用
- nitification(通知)的总结
- 全排列
- Linux——前端总线和缓存
- IOS学习之蓝牙4.0
- 《数据结构》实验5
- Jquery EasyUI --ValidateBox验证框
- Hadoop 面试题(一)
- linux下hg命令
- Write operations are not allowed in read-only mode
- ansilbe安装graphite
- 【大话设计模式】-有模板,啥都好说!
- 自定义Notification实现按钮点击事件
- 驱动模块Makefile解析