二叉树的遍历
2016-05-24 11:34
465 查看
一.实验目的
二叉树的遍历操作是树形结构其他众多操作的基础。本实验旨在使学生进一步加深对二叉树的先序、中序和后序等三种遍历次序特点的理解,熟悉二叉链表存储结构,熟练掌握二叉树上的递归算法的设计技术。
二.实验题目
1.构造一棵二叉树,使用二叉链表方式存储。
2设计程序,按照先序将这棵二叉树遍历出来,要求使用递归和非递归两种实现方式。
3.设计程序求二叉树中叶结点的个数。
二叉树的遍历操作是树形结构其他众多操作的基础。本实验旨在使学生进一步加深对二叉树的先序、中序和后序等三种遍历次序特点的理解,熟悉二叉链表存储结构,熟练掌握二叉树上的递归算法的设计技术。
二.实验题目
1.构造一棵二叉树,使用二叉链表方式存储。
2设计程序,按照先序将这棵二叉树遍历出来,要求使用递归和非递归两种实现方式。
3.设计程序求二叉树中叶结点的个数。
#include "iostream" using namespace std; typedef struct bitree{ char data; bitree* lchild; bitree* rchild; }*BiTree,BiNode; int count=0;//非递归遍历时栈指针 int number=0;//计算叶子节点的计数器 void createTree(BiTree& T); void traverse(BiTree& T); void not_digui_traverser(BiTree &T); void search_yezi_number(BiTree T); int main(){ BiTree root; createTree(root); traverse(root); cout<<endl; not_digui_traverser(root); cout<<endl; search_yezi_number(root); cout<<"The number of yezi is:"<<number<<endl; return 0; } //先序创建二叉树 //ab#d##C#e## void createTree(BiTree& T){ cout<<"Input element,if tree is null,please input #"<<endl; char ch; cin>>ch; if('#'==ch){ T=NULL; } else{ T=new BiNode; T->data=ch; createTree(T->lchild); createTree(T->rchild); } } //递归先序遍历二叉树 void traverse(BiTree& T){ if(T==NULL){ return; } cout<<T->data; traverse(T->lchild); traverse(T->rchild); } //非递归先序遍历二叉树 //BiTree stack_BiTree[100]={NULL};用数组代替栈 /* 非递归时应用会破坏后面的根节点,所以需要一个变量t BiTree T=t; */ void not_digui_traverser(BiTree &t){ BiTree T=t; BiTree stack_BiTree[100]={NULL}; while(T!=NULL||count!=0){ while(T!=NULL){ cout<<T->data; stack_BiTree[count]=T; count++; T=T->lchild; } T=stack_BiTree[--count]; T=T->rchild; } } void search_yezi_number(BiTree T){ if(T==NULL){ return; } if(T->lchild==NULL&&T->rchild==NULL){ number++; } search_yezi_number(T->lchild); search_yezi_number(T->rchild); }
相关文章推荐
- android 在非UI线程更新UI仍然成功原因深入剖析
- PHP实现同一个帐号不允许多人同时重复登陆
- css的核心内容 标准流、盒子模型、浮动、定位等分析
- MVP in Android,让Activity更优雅一点。
- unity3d 新UI系统UGUI点击与3D场景点击分离
- asp.net使用LINQ to SQL连接数据库及SQL操作语句用法分析
- android 字符串操作
- Typeface 篇
- Largest Number
- 通过Ruby on Rails和docker构建微服务架构之入门教程
- ListView 源码分析
- ==和equals的区别
- jsp页面中jstl标签详解
- 再谈SOAP webservice 与 Restful webservice
- jmeter进行接口压力测试
- C语言sprintf与sscanf函数[总结]
- Core Animation -关键帧动画
- 关于java中MySQL的事务回滚
- Java网络连接之HttpURLConnection与HttpClient 区别及联系
- Node.js 简单的MySQL proxy