树与二叉树的常见操作
来源:互联网 发布:mac虚拟机cad打开慢 编辑:程序博客网 时间:2024/05/01 14:37
实验内容:
1.输入字符序列,建立二叉链表。
2.前序,中序,后序遍历二叉树:递归算法。
3.中序遍历二叉树:非递归算法。
4.求二叉树的高度 。
5.求二叉树的叶子个数。
6.借助队列实现二叉树的层次遍历。
7.在主函数中设计一个简单的菜单,分别调试上述算法。
#include <iostream>#include <stdio.h>#include <stdlib.h>#include<string.h>#include<algorithm>#include<math.h>#include<queue>#include<stack>using namespace std;typedef long long ll;struct binode{ char data; binode *l,*r;};binode *create(binode *T)///建树{ char x; cin>>x; if(x=='@')T=NULL; else { T=(binode*)malloc(sizeof(binode)); T->data=x; T->l=create(T->l); T->r=create(T->r); } return T;}void postorder( binode *T )///递归实现后序遍历{ if ( T != NULL ) { postorder ( T->l); postorder ( T->r); printf("%c ",T->data); }}void preorder(binode *T)///递归实现前序遍历{ if (T != NULL) { printf("%c ",T->data); preorder ( T->l); preorder ( T->r); }}void midorder( binode * T )///递归实现中序遍历{ if ( T != NULL ) { midorder ( T->l); printf("%c ",T->data); midorder ( T->r); }}void mid(binode *T)///非递归实现中序遍历{ stack<binode*>s; binode *p=T; while(p||!s.empty()) { if(p) { s.push(p); p=p->l; } else { p=s.top(); s.pop(); cout<<p->data<<' '; p=p->r; } }}int deep(binode*T)///求树的高度{ int s=1; if(T!=NULL) { int max0=0; if(T->l!=NULL) max0=max(max0,deep(T->l)); if(T->r!=NULL) max0=max(max0,deep(T->r)); s+=max0; } return s;}int yezi(binode*T)///求叶子树{ int s=0; if(T->l!=NULL) s+=yezi(T->l); if(T->r!=NULL) s+=yezi(T->r); if(T->l==NULL&&T->r==NULL) s=1; return s;}queue<binode*>q;void cengcibianli(binode*T)///队列实现层次遍历{ if(T!=NULL) { if(T->l!=NULL) q.push(T->l); if(T->r!=NULL) q.push(T->r); cengcibianli(T->l); cengcibianli(T->r); }}int main(){ binode *a=NULL; a=create(a); cout<<"递归实现中序遍历:"<<endl; midorder(a); cout<<endl; cout<<"递归实现后序遍历:"<<endl; postorder(a); cout<<endl; cout<<"递归实现前序遍历:"<<endl; preorder(a); cout<<endl; cout<<"非递归实现中序遍历"<<endl; mid(a); cout<<endl; cout<<"树的高度为:"<<endl; cout<<deep(a)<<endl; cout<<"树的叶子数为:"<<endl; cout<<yezi(a)<<endl; cout<<"树的层次遍历:"<<endl; q.push(a); cengcibianli(a); while(!q.empty()) cout<<q.front()->data<<' ',q.pop(); return 0;}
0 0
- 树与二叉树的常见操作
- 二叉树的常见操作
- 数据结构 实验三 树与二叉树的常见操作
- 二叉树 常见操作
- 二叉树 常见操作
- java实现二叉树的常见操作
- java实现二叉树的常见操作
- java实现二叉树的常见操作
- java实现二叉树的常见操作
- java实现二叉树的常见操作
- 二叉树及常见操作
- 二叉树操作实现常见操作
- 数据结构实验——二叉树的常见操作
- 二叉树常见非递归操作
- 二叉树的建立与基本操作
- 简单的二叉树实现与操作...
- 简单的二叉树实现与操作
- 二叉搜索树的性质与操作
- 实习过程中linux相关开发学习总结(三)
- 约瑟夫生死问题
- nginx+tomcat+session共享
- iOS中图片的一些处理,磨砂,压缩,,
- 迷宫出路
- 树与二叉树的常见操作
- javaScript学习思维导向图
- C# 圆的面积计算 0005
- #6态势感知
- 输出对齐
- UIWebView - 使用方法总结
- Linux下 RabbitMQ的安装与配置
- 数据结构开篇(表)
- 【COCOS2DX-ANDROID-游戏开发之二十】停止手打所有cpp文件到android.mk