第五章 树和二叉树 实验
2014-11-30 16:36
239 查看
实验目的
巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。
1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
实验内容
1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。
二叉树结构如下:
源代码:
头文件(Bitree.h):
巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。
1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
实验内容
1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树结点。
二叉树结构如下:
源代码:
头文件(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源文件(bitree_main.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; }运行截图:
相关文章推荐
- 《数据结构》第五章 树和二叉树 实验
- 第五章实验:树与二叉树
- 《数据结构》第五章 树和二叉树 实验
- 实验报告 二叉树
- 数据结构实验之二叉树二:遍历二叉树
- 数据结构 实验三 树与二叉树的常见操作
- 二叉树实现实验
- 数据结构实验之二叉树二:遍历二叉树
- 20162307 实验二 二叉树
- 《数据结构》实验五: 树和二叉树实验
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树四:还原二叉树 (sdut oj 3343)
- SDUTOJ 2136--数据结构实验之二叉树的建立与遍历
- 数据结构实验之二叉树一:树的同构
- 数据结构实验之二叉树的建立与遍历oj
- 2136 数据结构实验之二叉树的建立与遍历
- 3341 数据结构实验之二叉树二:遍历二叉树
- 数据结构笔记——第五章 树和二叉树
- 实验五 树和二叉树的实验1 树的顺序结构的实现