二叉树的应用

二叉树的应用
二叉树的应用

二叉树的应用

————————————————————————————————作者: ————————————————————————————————日期:

?

二叉树的应用.txt14热情是一种巨大的力量,从心灵内部迸发而出,激励我们发挥出无穷的智慧和活力;热情是一根强大的支柱,无论面临怎样的困境,总能催生我们乐观的斗志和顽强的毅力……没有热情,生命的天空就没的色彩。#include<stdio.h>

#include

#include

using namespace std;

#define QUEUE_MAX_SIZE 30

#ifndef elemType

typedef char elemType;

#endif

int count=0;

typedef struct BiTNode { // 结点结构

char data;

struct BiTNode *lchild, *rchild,*parent; //左右孩子指针

} BiTNode, *BiTree;

void InitBiTree(BiTNode *t)//初始化,带头结点

{

t=new BiTNode;

t->lchild=t->rchild=t->parent=NULL;

}

int EmptyBiTree(BiTNode *t)//判断队空

if(t==0)

return 1;

else

return0;

}

void CreateBiTree(BiTree &T){

char ch;

scanf("%c",&ch);

if(ch==' ')T=NULL;

else{

if(!(T = (BiTNode* )malloc(sizeof(BiTNode)))) return;

T->data=ch;

CreateBiTree(T->lchild);

?CreateBiTree(T->rchild);

}//CreatBiTree

int PreOrder(BiTree T)//先序遍历二叉树的递归算法

{

?if (!T) return 0;

?printf("%c ",T->data); // 访问结点

PreOrder(T->lchild); // 遍历左子树

PreOrder(T->rchild);// 遍历右子树

return 1;

}

int InOrder(BiTreeT)//中序遍历二叉树的递归算法{

if (!T) return 0;

InOrder(T->lchild); // 遍历左子树

printf("%c ",T->data); // 访问结点InOrder(T->rchild);// 遍历右子树

return 1;

}

int PostOrder(BiTree T)//后序遍历二叉树的递归算法{

if (!T) return0;

PostOrder(T->lchild); // 遍历左子树PostOrder(T->rchild);// 遍历右子树

printf("%c ",T->data);//访问结点 return 1;

}

int DepthBiTree(BiTNode *t)//求二叉树的深度

{

int i,j;

if(EmptyBiTree(t))

return 0;

else

i=DepthBiTree(t->lchild);

j=DepthBiTree(t->rchild);

?return (i>j?i:j)+1;

}

}

elemType *FindBiTree(BiTNode *bt, elemType x){

if(bt== NULL)

?{

?return NULL;

?}

else

?{

?if(bt->data == x)

{

?return &(bt->data);

}

else{ /* 分别向左右子树递归查找 */

??elemType *p;

??if(p = FindBiTree(bt->lchild, x))

??{

?return p;

??}

??if(p = FindBiTree(bt->rchild, x))

??{

?return p;

???}

??return NULL;

??}

}

}

void PrintBiTree(BiTNode *bt)

{/* 树为空时结束递归,否则执行如下操作 */

?if(bt != NULL)

{

?printf("%c", bt->data); /* 输出根结点的值*/

?if(bt->lchild != NULL || bt->rchild != NULL)

?{

??printf("(");

???PrintBiTree(bt->lchild);

??if(bt->rchild != NULL){

printf(",");

???}

??PrintBiTree(bt->rchild);

??printf(")");

??}

?}

}

void LevelOrder(BiTNode *bt)

{

?struct BiTNode *p;

structBiTNode*q[QUEUE_MAX_SIZE];

int front =0, rear = 0;/* 将树根指针进队 */

?if(bt != NULL)

?{

?rear = (rear + 1) % QUEUE_MAX_SIZE;

??q[rear] = bt;

}

while(front !=rear)

{ /*队列非空 */

?front = (front + 1) % QUEUE_MAX_SIZE; /* 使队首指针指向队首元素 */ ??p = q[front];

?printf("%c ", p->data);/*若结点存在左孩子,则左孩子结点指针进队*/

??if(p->lchild!= NULL)

{

??rear = (rear + 1) % QUEUE_MAX_SIZE;

??q[rear] = p->lchild;

?}/* 若结点存在右孩子,则右孩子结点指针进队*/

??if(p->rchild != NULL)

?rear = (rear + 1) % QUEUE_MAX_SIZE; ??q[rear]= p->rchild;

?}

?}

void ClearBiTree(BiTNode * &bt)

{//清空二叉树,使之成为空树

?if(bt !=NULL)

?{

?ClearBiTree(bt->lchild);

?ClearBiTree(bt->rchild);

free(bt);

?bt = NULL;

?}

}

void main()

{

cout<<"输入完要连续输入空格才可以出结果"<<endl;?BiTNode *BT=NULL;

?intd;

char x;

?cout<<"1、初始化..."<<endl;

?InitBiTree(BT);

?cout<<"2、创建二叉树:";

?CreateBiTree(BT);

?cout<<"3、判断是否为空:";

?EmptyBiTree(BT);

?{if(BT==0)

cout<<"树为空"<<endl;

else

?cout<<"树不为空"<

cout<<"4、输出二叉树:";

?PrintBiTree(BT);

cout<

cout<<"5、先序遍历:"<

PreOrder(BT);

cout<

cout<<"6、中序遍历:"<

InOrder(BT);

?cout<

?cout<<"7、后序遍历:"<

PostOrder(BT);

?cout<<endl;

?cout<<"8、层次遍历:"<<endl;

LevelOrder(BT);

?cout<

?d=0;

cout<<"9、计算深度..."<

?d=DepthBiTree(BT);

cout<<"深度为:"<

?cout<<"10、查找值为x的结点"<<endl;

cout<<"输入要查找的值x:";

cin>>x;

FindBiTree(BT,x);

?cout<<"输出为:";

?cout<

cout<<"11、清空二叉树..."<<endl;

ClearBiTree(BT);

system("pause");

二叉排序树的建立及遍历的实现

课程设计任务书 题目: 二叉排序树的建立及遍历的实现 初始条件: 理论:学习了《数据结构》课程,掌握了基本的数据结构和常用的算法; 实践:计算机技术系实验室提供计算机及软件开发环境。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1、系统应具备的功能: (1)建立二叉排序树; (2)中序遍历二叉排序树并输出排序结果; 2、数据结构设计; 3、主要算法设计; 4、编程及上机实现; 5、撰写课程设计报告,包括: (1)设计题目; (2)摘要和关键字; (3)正文,包括引言、需求分析、数据结构设计、算法设计、程序实现及测试、设计体会等; (4)结束语; (5)参考文献。 时间安排:2007年7月2日-7日(第18周) 7月2日查阅资料 7月3日系统设计,数据结构设计,算法设计 7月4日-5日编程并上机调试7月6日撰写报告 7月7日验收程序,提交设计报告书。 指导教师签名: 2007年7月2日 系主任(或责任教师)签名: 2007年7月2日 排序二叉树的建立及其遍历的实现

摘要:我所设计的课题为排序二叉树的建立及其遍历的实现,它的主要功能是将输入的数据 组合成排序二叉树,并进行,先序,中序和后序遍历。设计该课题采用了C语言程序设计,简洁而方便,它主要运用了建立函数,调用函数,建立递归函数等等方面来进行设计。 关键字:排序二叉树,先序遍历,中序遍历,后序遍历 0.引言 我所设计的题目为排序二叉树的建立及其遍历的实现。排序二叉树或是一棵空树;或是具有以下性质的二叉树:(1)若它的左子树不空,则作子树上所有的结点的值均小于它的根结点的值;(2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;(3)它的左,右子树也分别为二叉排序树。对排序二叉树的建立需知道其定义及其通过插入结点来建立排序二叉树,遍历及其输出结果。 该设计根据输入的数据进行建立排序二叉树。对排序二叉树的遍历,其关键是运用递归 调用,这将极大的方便算法设计。 1.需求分析 建立排序二叉树,主要是需要建立节点用来存储输入的数据,需要建立函数用来创造排序二叉树,在函数内,需要进行数据比较决定数据放在左子树还是右子树。在遍历二叉树中,需要建立递归函数进行遍历。 该题目包含两方面的内容,一为排序二叉树的建立;二为排序二叉树的遍历,包括先序遍历,中序遍历和后序遍历。排序二叉树的建立主要运用了循环语句和递归语句进行,对遍历算法运用了递归语句来进行。 2.数据结构设计 本题目主要会用到建立结点,构造指针变量,插入结点函数和建立排序二叉树函数,求深度函数,以及先序遍历函数,中序遍历函数和后序遍历函数,还有一些常用的输入输出语句。对建立的函明确其作用,先理清函数内部的程序以及算法在将其应用到整个程序中,在建立排序二叉树时,主要用到建立节点函数,建立树函数,深度函数,在遍历树是,用到先序遍历函数,中序遍历函数和后序遍历函数。

二叉树的建立及其应用程序代码

#include #include #include #include typedef char elemtype; typedef struct tree //二叉树结构体 { elemtype data; struct tree *lchild; struct tree *rchild; }TREE; TREE *createbitree() //递归建立二叉树{ char ch; TREE *p; ch=getchar(); if (ch=='#') p=NULL; else { p=(TREE *)malloc(sizeof(TREE)); p->data=ch; p->lchild=createbitree(); p->rchild=createbitree(); } return p; } void preorder(TREE *p) //前序遍历 { if(p!=NULL) { printf("%c ",p->data); preorder(p->lchild); preorder(p->rchild); } } void inorder(TREE *p) //中序遍历 { if (p!=NULL)

{ inorder(p->lchild); printf("%c ",p->data); inorder(p->rchild); } } void postorder(TREE *p) //后序遍历 { if (p!=NULL) { postorder(p->lchild); postorder(p->rchild); printf("%c ",p->data); } } void shu(TREE *p,int len) //数的形状{ if (p!=NULL) { shu(p->lchild,len+1); for (int i=1;i<=4*len;i++) { printf(" "); } printf("%c",p->data); printf("------\n"); shu(p->rchild,len+1); } } int shendu(TREE *p) //计算深度 { int l,r; if (p==NULL) { return 0; } l=shendu(p->lchild)+1; r=shendu(p->rchild)+1; if (l>=r) //左右子树比较return l; else

实验三 二叉树的基本操作实现及其应用

二叉树的基本操作实现及其应用 一、实验目的 1.熟悉二叉树结点的结构和对二叉树的基本操作。 2.掌握对二叉树每一种操作的具体实现。 3.学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。 4.会用二叉树解决简单的实际问题。 二、实验内容 设计程序实现二叉树结点的类型定义和对二叉树的基本操作。该程序包括二叉树结构类型以及每一种操作的具体的函数定义和主函数。 1 按先序次序建立一个二叉树, 2按(A:先序 B:中序 C:后序)遍历输出二叉树的所有结点 以上比做,以下选做 3求二叉树中所有结点数 4求二叉树的深度 三、实验步骤 ㈠、数据结构与核心算法的设计描述 /* 定义DataType为char类型 */ typedef char DataType; /* 二叉树的结点类型 */ typedef struct BitNode { DataType data; struct BitNode *lchild,*rchild; }*BitTree; 相关函数声明: 1、/* 初始化二叉树,即把树根指针置空 */ void BinTreeInit(BitTree *BT) { BT=(BitTree)malloc(sizeof(BitNode)); BT->data=NULL; cout<<"二叉树初始化成功!"<>ch; if(ch=='#') BT=NULL; else { if(!(BT=(BitTree)malloc(sizeof(BitNode)))) exit(0);

二叉树的应用研究

二叉树的应用研究 苏雨洁 (盐城工学院优集学院江苏盐城224001) 摘要:课堂上学习可以知道,二叉树可以简单明了的表示很多繁琐的信息数据。同时,二叉树在有很多方面有具体的应用。通过搜集各方面的资料发现,越来越多的领域开始选择使用二叉树模型来进行设计投资决策,并以此为平台,实现了很多的功能,本文结合了多领域的知识,给出了在生活方面,学习方面,以及理财投资方面的多种实例,并且加以概括和介绍。 关键词:二叉树;数据结构;结点;数组;期权 Study on the application of the binary tree SU Yujie (UGS College, Yancheng Institute of Technology, Yancheng, Jiangsu 224001) Abstract: Through learning in the classroom we can know, binary tree can be simple and clear to show many complicated data.At the same time,binary tree have specific applications in many aspects.Through the collection of information in many aspects,we can find that more and more fields start to use the binomial tree model to design,invest and making descisions. Use it as a platform ,achieving a lot of functions. This article incorporates knowledge from many fields and show a variety of examples in the aspects of living, learning, and financial investment.And summarize and introduce. Key words: Binary tree;Data structure; Node; Array; Option 0引言 在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在度大于2的结点),二叉树的子树有左右之分,次序不能颠倒。逻辑上二叉树有五种基本形态:空二叉树,只有一个根结点的二叉树,右子树为空的二叉树,左子树为空的二叉树,完全二叉树;本文根据二叉树的性质形态,研究了二叉树在各个领域的应用实例,并且展望了二叉树在更多领域的应用。 1二叉树在学习上的应用 1.1二叉树平面坐标网及其应用 平面坐标系是把平面上的点映射为一对有序实数,坐标系是形数结合的桥梁。在图形,图像处理中,要处理的点数很多,能都有效的表示点就成为能否有效地处理图形图像的基本问题。数学上普遍使用切分方法,把一个复杂的几何对象近似表示成简单的几何对象的几何,集合中简单的几何对象位置就由其特征点(或点集)的坐标决定。把复杂的几何对象近似的

二叉树的建立及其遍历实验报告

数据结构实验报告 ———二叉树的建立及其遍历 一、实验目的 1、了解二叉树的建立的方法及其遍历的顺序,熟悉二叉树的三种遍历 2、检验输入的数据是否可以构成一颗二叉树 二、实验的描述和算法 1、实验描述 二叉树的建立首先要建立一个二叉链表的结构体,包含根节点和左右子树。因为耳熟的每一个左右子树又是一颗二叉树,所以可以用递归的方法来建立其左右子树。二叉树的遍历是一种把二叉树的每一个节点访问完并输出的过程,遍历时根结点与左右孩子的输出顺序构成了不同的遍历方法,这个过程需要按照不同的遍历的方法,先输出根结点还是先输出左右孩子,可以用选择语句实现。 2、算法 #include #include #define OVERFLOW 0 #define OK 1 #define ERROR 0 typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree CreateBiTree(BiTree T)

{ scanf("%c",&e); if(e==' ') T=NULL; else { if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW); T->data=e; T->lchild=CreateBiTree(T->lchild); T->rchild=CreateBiTree(T->rchild); } return T; } /************************前序遍历***********************/ char PreOrderTraverse(BiTree T,char (* Visit)(char e)) { if(T) { if(Visit(T->data)) if(PreOrderTraverse(T->lchild,Visit)) if(PreOrderTraverse(T->rchild,Visit)) return OK; return ERROR; } else return OK; } char Visit(char e) { printf("%5c",e); return OK; } main() {

二叉树的建立及几种简单的遍历方法

#include "stdio.h" #include "stdlib.h" #define STACK_INIT_SIZE 100 //栈存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 //------二叉树的存储结构表示------// typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; //-----顺序栈的存储结构表示------// typedef struct{ BiTree *top; BiTree *base; int stacksize; }SqStack; //*************************************************** //构造一个空栈s SqStack *InitStack(); //创建一颗二叉树 BiTree CreatBiTree(); //判断栈空 int StackEmpty(SqStack *S); //插入元素e为新的栈顶元素 void Push(SqStack *S,BiTree p); //若栈不为空,则删除s栈顶的元素e,将e插入到链表L中void Pop(SqStack *S,BiTree *q); //非递归先序遍历二叉树 void PreOrderTraverse(BiTree L); //非递归中序遍历二叉树 void InOrderTraverse(BiTree L); //非递归后序遍历二叉树 void PostOrderTraverse(BiTree L); //递归后序遍历二叉树 void PostOrder(BiTree bt); //递归中序遍历二叉树 void InOrder(BiTree bt); //递归先序遍历二叉树 void PreOrder(BiTree bt); //***************************************************

实验二叉树及其应用(严选材料)

实验6:二叉树及其应用 一、实验目的 树是数据结构中应用极为广泛的非线性结构,本单元的实验达到熟悉二叉树的存储结构的特性,以及如何应用树结构解决具体问题。 二、问题描述 首先,掌握二叉树的各种存储结构和熟悉对二叉树的基本操作。其次,以二叉树表示算术表达式的基础上,设计一个十进制的四则运算的计算器。 如算术表达式:a+b*(c-d)-e/f 三、实验要求 1、 如果利用完全二叉树的性质和二叉链表结构建立一棵二叉树,分别计算 a) 统计叶子结点的个数。 b) 求二叉树的深度。 2、 十进制的四则运算的计算器可以接收用户来自键盘的输入。 3、 由输入的表达式字符串动态生成算术表达式所对应的二叉树。 4、 自动完成求值运算和输出结果。 四、实验环境 PC 微机 DOS 操作系统或 Windows 操作系统 Turbo C 程序集成环境或 Visual C++ 程序集成环境 五、实验步骤 1、根据二叉树的各种存储结构建立二叉树; 2、设计求叶子结点个数算法和树的深度算法; 3、根据表达式建立相应的二叉树,生成表达式树的模块; - + / a * b - e f C d

4、根据表达式树,求出表达式值,生成求值模块; 5、程序运行效果,测试数据分析算法。 六、功能分析 存储结构 typedef union{ int Operator; // 操作符 float Operand; // 操作数 }Int_Float; //表达式树 typedef struct BinaryTreeNode{ Int_Float Data; //数据域 int IsOperator; //判断是不是操作数的标志位 struct BinaryTreeNode *RChild;//左子树 struct BinaryTreeNode *LChild;//右子树 }BiTreeNode, *lpBiTreeNode; //栈的定义 typedef struct { lpBiTreeNode *base; lpBiTreeNode *top; int stacksize; }SqStack; 函数一览表 lpBiTreeNode GetTop( SqStack s );//取栈顶结点函数 int IsEmpty( SqStack s );//判空函数 int InitStack( SqStack &s );//初始化栈函数 int Pop( SqStack &s, lpBiTreeNode &e );//出栈函数 int Push( SqStack &s, lpBiTreeNode e );//入栈函数 int In( int c, int* op );// 判断c是否在op中 int Precede( int theta1, int theta2 );//比较运算符号的优先级 int isNum( int c );//判断是不是数 int GetInput(Int_Float *Result);//读入输入的数 lpBiTreeNode CreateBiTree();//创建二叉树 bool calculate(lpBiTreeNode Root, float *result);//计算二叉树化表达式的值int getLeafNum(lpBiTreeNode Root);//计算二叉树的叶子结点数

数据结构课程设计_线索二叉树的生成及其遍历

数据结构课程设计 题目: 线索二叉树的生成及其遍历 学院: 班级: 学生姓名: 学生学号: 指导教师: 2012 年12月5日

课程设计任务书

摘要 针对以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而得不到结点的前驱与后继信息,为了使这种信息只有在遍历的动态过程中才能得到。增设两个指针分别指示其前驱和后继,但会使得结构的存储密度降低;并且利用结点的空链域存放(线索链表),方便。同时为了记下遍历过程中访问结点的先后关系,附设一个指针pre始终指向刚刚访问过的结点,若指针p 指向当前访问的结点,则 pre指向它的前驱。由此得到中序遍历建立中序线索化链表的算法 本文通过建立二叉树,实现二叉树的中序线索化并实现中序线索二叉树的遍历。实现对已生成的二叉树进行中序线索化并利用中序线索实现对二叉树的遍历的效果。 关键词二叉树,中序线索二叉树,中序线索二叉树的遍历

目录 摘要 ............................................ 错误!未定义书签。第一章,需求分析................................. 错误!未定义书签。第二章,概要设计 (1) 第三章,详细设计 (2) 第四章,调试分析 (5) 第五章,用户使用说明 (5) 第六章,测试结果 (5) 第七章,绪论 (6) 第八章,附录参考文献 (7)

线索二叉树的生成及其遍历 第一章需求分析 以二叉链表作为存储结构时,只能找到结点的左、右孩子的信息,而得不到结点的前驱与后继信息,为了使这种信息只有在遍历的动态过程中才能得到。增设两个指针分别指示其前驱和后继,但会使得结构的存储密度降低;并且利用结点的空链域存放(线索链表),方便。同时为了记下遍历过程中访问结点的先后关系,附设一个指针pre始终指向刚刚访问过的结点,若指针p 指向当前访问的结点,则 pre指向它的前驱。由此得到中序遍历建立中序线索化链表的算法 本文通过建立二叉树,实现二叉树的中序线索化并实现中序线索二叉树的遍历。实现对已生成的二叉树进行中序线索化并利用中序线索实现对二叉树的遍历的效果。主要任务: 1.建立二叉树; 2.将二叉树进行中序线索化; 3.编写程序,运行并修改; 4.利用中序线索遍历二叉树 5.书写课程设计论文并将所编写的程序完善。 第二章概要设计 下面是建立中序二叉树的递归算法,其中pre为全局变量。 BiThrNodeType *pre; BiThrTree InOrderThr(BiThrTree T) { /*中序遍历二叉树T,并将其中序线索化,pre为全局变量*/ BiThrTree head; head=(BitThrNodeType *)malloc(sizeof(BiThrType));/*设申请头结点成功*/ head->ltag=0;head->rtag=1;/*建立头结点*/ head->rchild=head;/*右指针回指*/ if(!T)head->lchild=head;/*若二叉树为空,则左指针回指*/ else{head->lchild=T;pre=head; InThreading(T);/*中序遍历进行中序线索化*/ pre->rchild=head; pre->rtag=1;/*最后一个结点线索化*/ head->rchild=pre; }; return head; } void InThreading(BiThrTree p) {/*通过中序遍历进行中序线索化*/ if(p)

二叉树的建立和遍历的实验报告doc

二叉树的建立和遍历的实验报告 篇一:二叉树的建立及遍历实验报告 实验三:二叉树的建立及遍历 【实验目的】 (1)掌握利用先序序列建立二叉树的二叉链表的过程。 (2)掌握二叉树的先序、中序和后序遍历算法。 【实验内容】 1. 编写程序,实现二叉树的建立,并实现先序、中序和后序遍历。 如:输入先序序列abc###de###,则建立如下图所示的二叉树。 并显示其先序序列为:abcde 中序序列为:cbaed 后序序列为:cbeda 【实验步骤】 1.打开VC++。 2.建立工程:点File->New,选Project标签,在列表中选Win32 Console Application,再在右边的框里为工程起好名字,选好路径,点OK->finish。至此工程建立完毕。 3.创建源文件或头文件:点File->New,选File标签,在列表里选C++ Source File。给文件起好名字,选好路径,点OK。至此一个源文件就被添加到了你刚创建的工程之中。

4.写好代码 5.编译->链接->调试 #include #include #define OK 1 #define OVERFLOW -2 typedef int Status; typedef char TElemType; typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; }BiTNode,*BiTree; Status CreateBiTree(BiTree &T) { TElemType ch; scanf("%c",&ch); if (ch=='#') T= NULL; else { if (!(T = (BiTNode *)malloc(sizeof(BiTNode))))

实验5 二叉树建立及应用

实验五二叉树建立及应用 一、实验目的 1.熟悉二叉树的存贮结构及遍历方式,掌握有关算法的实现。 2.能够利用二叉树解决具体问题。 二、实验环境 ⒈硬件:每个学生需配备计算机一台。操作系统:DOS或Windows; ⒉软件:DOS或Windows操作系统+Turbo C; 三、实验要求 ⒈要求采用二叉链表作为存贮结构,完成二叉树的建立、先序、中序、和后序遍历的 操作。 ⒉输入数据:树中每个结点的数据类型设定为字符型。 3.设计一棵二叉树,输入完全二叉树的先序序列,用#代表虚结点(空指针),如ABD###CE##F##,建立二叉树,求出先序、中序和后序遍历,求该二叉树所有叶子结点总数。 四、实验内容 附:参考程序为类C语言程序,非标准C语言程序,需要进行相应的修改。 二叉链表结构如下:P134 typedef struct lnode {char data; struct lnode *lchild,*rchild; }lnode,*tree;

1.建树子函数P137 status creat(tree &t) {//按先序次序输入二叉树中结点的值,’.’字符表示空树 scanf(&ch); if(ch=='.') t=null; else {t=(tree)malloc(sizeof(lnode)); t->data=ch; creat(t->lchild); creat(t->rchild);} return ok; } 2.先序遍历子函数P136 preorder(tree t) { if(t!=null) {printf(t->data); preorder(t->lchild); preorder(t->rchild); } } 3.后序遍历子函数P136 postorder(tree t) {if(t!=null) {postorder(t->lchild); postorder(t->rchild); printf(t->data); } } 五、思考题 1. 已知二叉树先序和中序序列,唯一地构造一棵二叉树并且验证其正确性。 2. 建立一个二叉树,并且按层次遍历操作。 六、报告要求 1.报告要求用专门的实验报告纸书写,字迹清晰,格式规范。 2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验要求。

java二叉树的建立与应用代码

public class Tree {//定义一个二叉树类 private T root; public T getRoot() { return root; } public void setRoot(T root) { this.root = root; } //get()函数与set()函数成对出现,来设定变量的值 public Tree getLeftChild() { return leftChild; } public void setLeftChild(Tree leftChild) { this.leftChild = leftChild; } public Tree getRight() { return right; } public void setRight(Tree right) { this.right = right; } private Tree leftChild; private Tree right; public Tree(T root) { this.root= root; } public boolean isEmptyTree() { return root==null; } public boolean exists(T data) {

if(root==null) return false; if(data!=null) { if(!isEmptyTree() && root.equals(data)) return true;//如果树不空,而且根等于data返回true if(!leftChild.isEmptyTree() && leftChild.exists(data)) return true; if(!right.isEmptyTree() && right.exists(data)) return true; } return false; } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Tree a11 = new Tree("a11"); Tree a12 = new Tree("a12"); Tree a1 = new Tree("a1"); a1.setLeftChild(a11); a1.setRight(a12); Tree b11 = new Tree("b11"); Tree b1 = new Tree("b1"); b1.setRight(b11); Tree a = new Tree("a"); a.setLeftChild(a1); a.setRight(b1); String c11 = null;//定义一个字符串型的变量c11,初始值为null System.out.print(a.exists(c11));//判断二叉树a中是否含有c11 } }

用C语言编写二叉树的建立与遍历

用C语言编写二叉树的建立与遍历 #include "stdio.h" #include "string.h" #define NULL 0 typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create(BiTree T){ char ch; ch=getchar(); if(ch=='#') T=NULL; else{ if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) printf("Error!"); T->data=ch; T->lchild=Create(T->lchild); T->rchild=Create(T->rchild); } return T;

} void Preorder(BiTree T){ if(T){ printf("%c",T->data); Preorder(T->lchild); Preorder(T->rchild); } } int Sumleaf(BiTree T){ int sum=0,m,n; if(T){ if((!T->lchild)&&(!T->rchild)) sum++; m=Sumleaf(T->lchild); sum+=m; n=Sumleaf(T->rchild); sum+=n; } return sum; } void zhongxu(BiTree T){ if(T){

zhongxu(T->lchild); printf("%c",T->data); zhongxu(T->rchild); } } void houxu(BiTree T){ if(T){ houxu(T->lchild); houxu(T->rchild); printf("%c",T->data); } } int Depth(BiTree T){ int dep=0,depl,depr; if(!T) dep=0; else{ depl=Depth(T->lchild); depr=Depth(T->rchild); dep=1+(depl>depr?depl:depr); } return dep; }

C++二叉树的创建与遍历实验报告

二叉树的创建与遍历 一、实验目的 1.学会实现二叉树结点结构和对二叉树的基本操作。 2.掌握对二叉树每种操作的具体实现,学会利用递归和非递归方法编写对二叉树这种递归数据结构进行处理的算法。 二、实验要求 1.认真阅读和掌握和本实验相关的教材内容。 2.编写完整程序完成下面的实验内容并上机运行。 3.整理并上交实验报告。 三、实验内容 1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归和非递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历。 四、实验步骤 源程序代码1 #include #include using namespace std; template struct BinTreeNode //二叉树结点类定义 { T data; //数据域 BinTreeNode *leftChild,*rightChild; //左子女、右子女域 BinTreeNode(T x=T(),BinTreeNode* l =NULL,BinTreeNode* r = NULL ) :data(x),leftChild(l),rightChild(r){} //可选择参数的默认构造函数 }; //------------------------------------------------------------------------- template void PreOrder_2(BinTreeNode *p) //非递归前序遍历 { stack * > S;

二叉树在C语言中的实现与应用详解

/************************************************************************/ 二叉树在C语言中的实现与应用 /************************************************************************/ #include #include #define STACK_MAX_SIZE 30 #define QUEUE_MAX_SIZE 30 #ifndef elemType typedef char elemType; #endif /************************************************************************/ /* 以下是关于二叉树操作的11个简单算法 */ /************************************************************************/ struct BTreeNode{ elemType data; struct BTreeNode *left; struct BTreeNode *right; }; /* 1.初始化二叉树 */ void initBTree(struct BTreeNode* *bt) { *bt = NULL; return; } /* 2.建立二叉树(根据a所指向的二叉树广义表字符串建立) */ void createBTree(struct BTreeNode* *bt, char *a) { struct BTreeNode *p; struct BTreeNode *s[STACK_MAX_SIZE];/* 定义s数组为存储根结点指针的栈使用 */ int top = -1; /* 定义top作为s栈的栈顶指针,初值为-1,表示空栈 */ int k; /* 用k作为处理结点的左子树和右子树,k = 1处理左子树,k = 2处理右子树 */ int i = 0; /* 用i扫描数组a中存储的二叉树广义表字符串,初值为0 */ *bt = NULL; /* 把树根指针置为空,即从空树开始建立二叉树 */ /* 每循环一次处理一个字符,直到扫描到字符串结束符\0为止 */ while(a[i] != '\0'){ switch(a[i]){ case ' ': break; /* 对空格不作任何处理 */ case '(': if(top == STACK_MAX_SIZE - 1){ printf("栈空间太小!\n"); exit(1); }

二叉树的建立及遍历

数据结构实验五 课程数据结构实验名称二叉树的建立及遍历第页 专业班级学号 姓名 实验日期:年月日评分 一、实验目的 1.学会实现二叉树结点结构和对二叉树的基本操作。 2.掌握对二叉树每种操作的具体实现,学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。 二、实验要求 1.认真阅读和掌握和本实验相关的教材内容。 2.编写完整程序完成下面的实验内容并上机运行。 3.整理并上交实验报告。 三、实验内容 1.编写程序任意输入二叉树的结点个数和结点值,构造一棵二叉树,采用三种递归遍历算法(前序、中序、后序)对这棵二叉树进行遍历并计算出二叉树的高度。 2 .编写程序生成下面所示的二叉树,并采用先序遍历的非递归算法对此二叉 树进行遍历。 四、实验步骤 (描述实验步骤及中间的结果或现象。在实验中做了什么事情,怎么做的,发生的现象和中间结果) 第一题 #include "stdafx.h" #include"iostream.h" #include"stdlib.h"

#include"stdio.h" #includelchild); int n=depth(T->rchild); ?return (m>n?m:n)+1; } } //先序,中序建树 structnode*create(char *pre,char *ord,int n) { ?struct node*T; intm; T=NULL; ?if(n<=0) ?{ ?returnNULL; } ?else ?{ ?m=0; ??T=new(struct node); T->data=*pre; ?T->lchild=T->rchild=NULL; ?while(ord[m]!=*pre) ?m++; T->lchild=create(pre+1,ord,m); ?T->rchild=create(pre+m+1,ord+m+1,n-m-1);

创建一个二叉树并输出三种遍历结果

实验报告 课程名称数据结构 实验项目实验三--创建一个二叉树并输出三种遍历结果 系别___ _计算机学院 _ ______ 专业___ ___ 班级/学号___________ 学生姓名 _________ 实验日期_ 成绩_______________________ 指导教师

实验题目:实验三------创建一个二叉树并输出三种遍历结果 一、实验目的 1)掌握二叉树存储结构; 2)掌握并实现二叉树遍历的递归算法和非递归算法; 3)理解树及森林对二叉树的转换; 4)理解二叉树的应用—哈夫曼编码及WPL计算。 二、实验内容 1)以广义表或遍历序列形式创建一个二叉树,存储结构自选; 2)输出先序、中序、后序遍历序列; 3)二选一应用题:1)树和森林向二叉树转换;2)哈夫曼编码的应用问题。(应用型 题目可替换上述前两项实验内容) 三、设计与编码 1)程序结构基本设计框架 (提示:请根据所选定题目,描述程序的基本框架,可以用流程图、界面描述图、框图等来表示) 2)本实验用到的理论知识 遍历二叉树,递归和非递归的方法

(提示:总结本实验用到的理论知识,实现理论与实践相结合。总结尽量简明扼要,并与本次实验密切相关,要求结合自己的题目并阐述自己的理解和想法) 3)具体算法设计 (1)首先,定义二叉树的存储结构为二叉链表存储,每个元素的数据类型Elemtype,定义一棵二叉树,只需定义其根指针。 (2)然后以递归的先序遍历方法创建二叉树,函数为CreateTree(),在输入字符时要注意,当节点的左孩子或者右孩子为空的时候,应 当输入一个特殊的字符(本算法为“#”),表示左孩子或者右孩子为 空。 (3)下一步,创建利用递归方法先序遍历二叉树的函数,函数为PreOrderTree(),创建非递归方法中序遍历二叉树的函数,函数为 InOrderTree(),中序遍历过程是:从二叉树的根节点开始,沿左子树 向下搜索,在搜索过程将所遇到的节点进栈;左子树遍历完毕后, 从栈顶退出栈中的节点并访问;然后再用上述过程遍历右子树,依 次类推,指导整棵二叉树全部访问完毕。创建递归方法后序遍历二 叉树的函数,函数为LaOrderTree()。 (提示:该部分主要是利用C、C++等完成数据结构定义、设计算法实现各种操作,可以用列表分步形式的自然语言描述,也可以利用流程图等描述) 4)编码 #include #include #include typedef char DataType; #define MaxSize 100 typedef struct Node { DataType data; struct Node *lchild; struct Node *rchild; } *BiTree,BitNode; void InitBitTree(BiTree *T); /*树的初始化*/ void CreateBitTree(BiTree *T); /*按照先序输入字符序列递归创建二叉树*/ void PreOrderTraverse(BiTree T); /*二叉树的先序遍历的递归函数声明*/ void InOrderTraverse(BiTree T); /*二叉树的中序遍历的递归函数声明*/ void PostOrderTraverse(BiTree T); /*二叉树的后序遍历的递归函数声明*/ void PreOrderTraverse2(BiTree T); /*二叉树的先序遍历的非递归函数声明*/ void InOrderTraverse2(BiTree T); /*二叉树的中序遍历的非递归函数声明*/ void PostOrderTraverse2(BiTree T); /*二叉树的后序遍历的非递归函数声明*/

相关文档
最新文档