当前位置:文档之家› 数据结构课程设计二叉树遍历查找

数据结构课程设计二叉树遍历查找

课程设计任务书2011 —2012 学年第一学期电子与信息工程系计算机专业09计算机一班班级课程设计名称:数据结构课程设计设计题目:排序二叉树的遍历完成期限:自2012 年 1 月 2 日至2012 年 1 月 6 日共 1 周设计依据、要求及主要内容(可另加附页):一、设计目的熟悉各种数据结构和运算,会使用数据结构的基本操作解决一些实际问题。

二、设计要求(1)重视课程设计环节,用严谨、科学和踏实的工作态度对待课程设计的每一项任务;(2)按照课程设计的题目要求,独立地完成各项任务,严禁抄袭;凡发现抄袭,抄袭者与被抄袭者皆以零分计入本课程设计成绩。

凡发现实验报告或源程序雷同,涉及的全部人员皆以零分计入本课程设计成绩;(3)学生在接受设计任务后,首先要按设计任务书的要求编写设计进程表;(4)认真编写课程设计报告。

三、设计内容排序二叉树的遍历(用递归或非递归的方法都可以)1)问题描述输入树的各个结点,建立排序二叉树,对建立的排序二叉树进行层次、先序、中序和后序遍历并统计该二叉树中叶子结点的数目。

2)基本要求(1)用菜单实现(2)能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列和叶子结点的数目。

四、参考文献1.王红梅.数据结构.清华大学出版社2.王红梅.数据结构学习辅导与实验指导.清华大学出版社3.严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社#include<iostream>using namespace std;int num;//-----------排序二叉树节点--------------//struct tree //定义二叉树节点结构{int data; //节点数据域tree *right,*left; //右,左子树指针};//-----------排序二叉树类----------------//class Btree{tree *root;//根节点public:Btree(){root=NULL;//根节点在构造函数里初始化}void create_btree(int);//创建排序二叉树void display1(){preorder(root);//前序cout<<endl;}void display2(){inorder(root);//中序cout<<endl;}void display3(){postorder(root);//后序cout<<endl;}void display4(){leverorder(root);//层序cout<<endl;}void display5(){leafnum(root);//结点cout<<endl;}void preorder(tree *);//前序void inorder(tree *);//中序void postorder(tree *);//后序void leverorder(tree *);//层序void leafnum(tree *);//结点void empty( );int printnum( );};void Btree::create_btree(int t){tree *newnode=new tree;//创建新的节点存入数据并插入二叉树中newnode->data =t; //存入数据tnewnode->left =NULL;newnode->right =NULL;if(root==NULL) //当是根节点为空时即二叉树中没有任何数据时{root=newnode; //根节点为新节点}else //当有二叉树中拥有数据后{tree *back;tree *current;current=root;while(current!=NULL){back=current; //记住current的父节点if(current->data>t)current=current->left;else current=current->right ;}if(back->data>t)back->left =newnode;else back->right =newnode;}}void Btree::preorder (tree* tmp)//前序{if(tmp!=NULL){cout<<tmp->data<<" ";preorder(tmp->left);preorder(tmp->right);}}void Btree::inorder (tree* tmp)//中序{if(tmp!=NULL){inorder(tmp->left);cout<<tmp->data<<" ";inorder(tmp->right );}}void Btree::postorder (tree* tmp)//后序{if(tmp!=NULL){postorder(tmp->left);postorder(tmp->right);cout<<tmp->data<<" ";}}void Btree::leverorder (tree* tmp)//层序{const int maxsize = 100;int front =0;int rear = 0;tree* Q[maxsize];tree* q;if (tmp==NULL) return;else{Q[rear++] = tmp;while (front != rear){q = Q[front++];cout<<q->data<<" ";if (q->left != NULL) Q[rear++] = q->left;if (q->right != NULL) Q[rear++] = q->right;}}}void Btree::leafnum (tree* tmp)//求叶子结点个数{if(tmp==NULL) return;else{if(!(tmp->left) && !(tmp->right))num++;leafnum(tmp->left); //左子树中的叶子结点个数leafnum(tmp->right); //右子树中的叶子结点个数}}void Btree::empty( ){num=0;}int Btree::printnum(){return num;// Btree::getroot()//{return root;}int main(int argc, char* argv[]){Btree A;cout<<"请出入数据"<<endl;int n;cin>>n;int *arr;arr=new int[n];for(int j=0;j<n;j++){cin>>arr[j];}cout<<"建立排序二叉树顺序:"<<endl;for(int i=0;i<n;i++){cout<<arr[i]<<" ";A.create_btree(*&arr[i]);}cout<<" "<<endl;//tree *root;int x=-1;while(x!=0){cout<<"1.前序遍历"<<endl;cout<<"2.中序遍历"<<endl;cout<<"3.后序遍历"<<endl;cout<<"4.层序遍历"<<endl;cout<<"5.叶子节点个数"<<endl;cout<<"0.退出"<<endl;cin>>x;switch(x){case 1:cout<<"前序遍历为:"<<endl;A.display1();cout<<endl;break;case 2:cout<<"中序遍历为:"<<endl;A.display2();cout<<endl;break;case 3:cout<<"后序遍历为:"<<endl;A.display3();cout<<endl;break;case 4:cout<<"层序遍历为:"<<endl;A.display4();cout<<endl;break;case 5:A.empty();A.display5();cout<<"叶子结点个数为:"<<A.printnum()+1<<endl;break;case 0:exit(0);}}return 0;}。

相关主题