实验七 二叉树操作(二)
来源:互联网 发布:phpcms网站源码 编辑:程序博客网 时间:2024/04/29 05:56
实验七 二叉树操作(二)
一、 实验目的
1. 掌握二叉树的创建
2. 掌握二叉树的遍历
3. 掌握二叉树的应用
二、 实验内容。
1.前序地创建二叉树ABC##DE#G##F###,实现复制构造函数、、返回树的高、返回结点数、层序遍历二叉树。
2.设计测试步骤,测试以上每个函数。
3.提高部分:遍历硬盘中某个文件夹。
三、 实验环境
1.pc机,windowsxp操作系统
2.VC++6.0软件
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespacestd;
#define SIZE 50
int leafcount=0;
typedef structBiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
typedef struct{
BiTNode *base;
int front;
int rear;
int length;
}Queue,*PQueue;
voidinit_Q(Queue &Q);
void En_Q(Queue&Q,BiTree T);
void De_Q(Queue&Q,BiTree &T);
voidLevelOrderTraverse(BiTree T){//层序遍历
Queue Q;
init_Q(Q);
if(T){
En_Q(Q,T);
}
while(Q.front!=Q.rear){
BiTree temp;
De_Q(Q,temp);
putchar(temp->data);
if(temp->lchild) En_Q(Q,temp->lchild);
if(temp->rchild) En_Q(Q,temp->rchild);
}
}
voidinit_Q(Queue &Q){
Q.base=new BiTNode[SIZE];
Q.front=Q.rear=0;
Q.length=0;
}
void En_Q(Queue&Q,BiTree T){
if(Q.length==SIZE){
printf("FULL!\n");
return;
}
Q.base[Q.rear]=*T;
Q.rear=(Q.rear+1)%SIZE;
Q.length++;
}
void De_Q(Queue&Q,BiTree &T){
if(Q.length==0){
printf("EMPTY!\n");
return;
}
T=&(Q.base[Q.front]);
Q.front=(Q.front+1)%SIZE;
Q.length--;
}
intCreateBiTree(BiTree *T)/*根据先序序列建立二叉树的二叉链表*/
{ char ch;
scanf("%c",&ch);
if(ch=='#')
{
*T=NULL;
}
else{
if(!(*T=(BiTree)malloc(sizeof(BiTNode)))) return 0;
(*T)->data=ch;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
return 1;
}
intpreOrder(BiTree T)/*先序遍历的递归算法*/
{
if(T){
printf("%c ",T->data);
if (!T->lchild&&!T->rchild)leafcount+=1;
preOrder(T->lchild);
preOrder(T->rchild);
}
return 1;
}
intinOrder(BiTree T)/*中序遍历的递归算法*/
{
if(T){
inOrder(T->lchild);
printf("%c ",T->data);
inOrder(T->rchild);
}
return 1;
}
intoldOrder(BiTree T)/*后序遍历的递归算法*/
{
if(T){
oldOrder(T->lchild);
oldOrder(T->rchild);
printf("%c ",T->data);
}
return 1;
}
int Size(BiTreeT){
//输出节点数
if(T==NULL)
return 0;
else return1+Size(T->lchild)+Size(T->rchild);
}
int Hight(BiTreeT)
{
if(T==NULL)return 0;
else{
int i=Hight(T->lchild);
int j=Hight(T->rchild);
return (i>j)?i+1:j+1;
}
}
void main()
{ BiTree T;
leafcount=0;
int n;
printf("请读入字符abc--de-g--f---\n");
CreateBiTree(&T);
printf("先序遍历序列为:");
preOrder(T);
printf("\n中序遍历序列为:");
inOrder(T);
printf("\n后序遍历序列为:");
oldOrder(T);
printf("\n 层序遍历:");
LevelOrderTraverse(T);
printf("\n叶子节点:%d\n",leafcount);
printf("所有结点个数");
n=Size(T);
printf("%d",n);
cout<<"\nhigh="<<Hight(T)<<endl;
//system("pause");
}
- 实验七 二叉树操作(二)
- 实验七 二叉树及其应用(二)
- 实验七 项目二
- 实验七 命令操作
- 二叉树的相关操作(二)
- 二叉树的基本操作(二)
- 二叉树的基本操作(二)
- 二叉树的操作(二)
- 数据结构实验之二叉树七:叶子问题(层序遍历输出叶子)
- 实验七 二叉树的其他典型算法
- 数据结构实验之二叉树七:叶子问题
- SDUT OJ 数据结构实验之二叉树七:叶子问题
- 数据结构实验之二叉树七:叶子问题
- 数据结构实验之二叉树七:叶子问题
- SDUT 3346 数据结构实验之二叉树七:叶子问题
- 数据结构实验之二叉树七:叶子问题
- 数据结构实验之二叉树七:叶子问题 (sdut OJ3346)
- 数据结构实验之二叉树七:叶子问题
- 完美解决多应用服务器负载均衡环境下spring quartz同一定时任务重复执行问题
- bit 1003 Exchange for Cola
- ios 国际化(项目名和内容)
- andriod 待机 开机流程
- 探索Android 下拉刷新效果的实现
- 实验七 二叉树操作(二)
- android 按键处理
- MotionEvent事件在onInterceptTouchEvent()、onTouchEvent()中的传递顺序
- javascript美化下拉框js
- 《持续交付》笔记——第2章 配置管理
- 图的遍历
- Flexpaper参数,Flexpaper使用方法,Flexpaper下载
- Android学习指南基础--第一讲:Android开发环境的搭建【附件有图】
- Android从零开始(十二)