二叉树遍历
来源:互联网 发布:伍聚网络股票 编辑:程序博客网 时间:2024/06/05 03:47
16 学年—17学年第 1 学期 数据结构实验任务书
专业名称: 实验学时: 2
课程名称:数据结构 任课教师: 翟海霞
实验题目: 二叉树的基本操作实现
实验环境: Visual C++ 6.0
实验目的:掌握二叉树的二叉链存储结构及表示。
掌握二叉树的三种遍历算法(递归和非递归两类)。
运用三种遍历的方法求解二叉树的有关问题。
实验内容:实现二叉树的二叉链表存储结构;
实现先序、中序和后序遍历二叉树;
遍历二叉树的应用:计算叶子结点、左右子树交换等。
要求:1、二叉树基本操作已实现,学习和进一步理解。
2、在求总结点的程序中加入求叶子结点的功能。
3、左右子树交换,按中序和后序是否也可以?
4、选作:按层遍历二叉树。
#include<stdio.h>#include<stdlib.h>#define MAX 100 #include<queue>#define OK 1;char ch;//二叉树存储结构typedef struct BiTNode{char date;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree; //创建二叉链表表示的二叉树//Status CreateBiTree(BiTree &T)void CreateBiTree(BiTree &T){scanf("%c",&ch);if(ch=='#')T=NULL;//递归结束,建立空树else{T=(BiTree)malloc(sizeof(BiTNode));//生成根节点T->date=ch;//根节点数据域置为chCreateBiTree(T->lchild);CreateBiTree(T->rchild);} } //先序遍历 void PreTra(BiTree T) { if(T) { printf("%c",T->date); PreTra(T->lchild); PreTra(T->rchild); } } //中序遍历 void InTra(BiTree T) { if(T) { InTra(T->lchild); printf("%c",T->date); InTra(T->rchild); } } //后序遍历 void PostTra(BiTree T) { if(T) { PostTra(T->lchild); PostTra(T->rchild); printf("%c",T->date); } } //层序遍历 void LevelTra(BiTree T) { BiTree Q[MAX]; int front=0,rear=0; BiTree p; //根节点入队 if(T) { Q[rear]=T; rear=(rear+1)%MAX;//插入节点为新的队尾元素 } while(front!=rear) { //队头元素出队 p=Q[front]; front=(front+1)%MAX; //删除头结点 printf("%c",p->date); //左孩子不为空,入队 if(p->lchild) { Q[rear]=p->lchild; rear=(rear+1)%MAX;//插入左孩子结点为新的队尾元素} if(p->rchild){Q[rear]=p->rchild;rear=(rear+1)%MAX;}} } //计算节点数 int NodeCount(BiTree T) { if(T==NULL) return 0; else return NodeCount(T->lchild)+NodeCount(T->rchild)+1; } //交换左右子树 void Exchange(BiTree &T){if(T){BiTree s;s=T->lchild;T->lchild=T->rchild;T->rchild=s;Exchange(T->lchild);Exchange(T->rchild);} } //主菜单函数 void menu() { printf("1.建立二叉树\n"); printf("2.先序遍历二叉树\n"); printf("3.中序遍历二叉树\n"); printf("4.后序遍历二叉树\n"); printf("5.层序遍历\n"); printf("6.计算二叉树节点数\n"); printf("7.交换左右子树\n");} //主函数 ABC##DE#G##F#### int main(){printf("\n************************二叉树基本操作实现*******************\n\n");int n,num;BiTree T=NULL;menu();while(1){ printf("请输入你的选择:\n");scanf("%d",&n);switch(n){case 1:{ printf("输入各元素,空子树用#表示:\n"); CreateBiTree(T); printf("创建成功!\n\n"); }break; case 2:{ printf("先序遍历:"); PreTra(T);printf("\n\n"); }break; case 3:{ printf("中序遍历:"); InTra(T); printf("\n\n"); }break;case 4:{ printf("后序遍历:"); PostTra(T); printf("\n\n"); }break;case 5:{ printf("层序遍历:"); LevelTra(T); printf("\n\n"); }break;case 6:{ num=NodeCount(T); printf("结点数为:%d",num); printf("\n\n"); }break;case 7:{ printf("交换左右子树:"); Exchange(T); printf("交换成功!\n\n"); }break;case 0:exit(0); default: printf("无效输入!\n\n"); }}return 0;}
0 0
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- 数学之美3
- Oracles数据库 修改表名 列名 字段类型 语句
- Android_listview_video安卓列表视频直接播放
- PendingIntent与Intent的区别
- MySQL数据库企业生产常用4种安装方法介绍和选择
- 二叉树遍历
- 重装系统U盘版本
- JavaScript实现tab标签-解决循环bug问题
- EM算法学习笔记
- Android简易实战教程--第三十八话《自定义通知NotifiCation》
- hdu 5912 Fraction -2016中国大学生程序设计竞赛(长春)
- 面试经历
- 【egret】 egret游戏中添加“长按识别二维码”
- MAC 下修改mysql默认密码方法