【优质文档】二叉树的应用范例-精选word文档 (18页)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!
== 本文为word格式,下载后可方便编辑和修改! ==
二叉树的应用范例
篇一:二叉树应用示例
下面以二叉链表为存储结构,给出一个可进行二叉树基本操作的完整程序,具
有以下功能:
(1)根据输入字符序列,建立二叉链表;
(2)用递归算法实现输出二叉树的前序、中序、后序遍历序列;
(3)用非递归算法实现输出二叉树的前序、中序遍历序列;
(4)求二叉树的叶子个数;
(5)求度为1的结点的个数;
(6)求二叉树的高度。

建立二叉链表的方法有多种,前面已经介绍了一种,即将二叉树扩充成完全二
叉树后,带虚点一起将结点按层次次序排列,然后依次输入该序列中各结点,
创建二叉链表。

在下面程序中使用的是另外一种建立二叉链表的方法,其主要
的实现思想是:添加虚结点,将二叉树中的每一个结点都扩充成度为2的结点,然后对扩充后的二叉树按前序遍历得到前序序列,依次输入序列中各结点,建
立二叉链表。

例如:若要创建5.13的二叉树对应的二叉链表,应该依次输入ABC##FG###D#E##(其中#表示虚点)。

这是一个利用递归特性实现创建二叉链
表的算法,C函数为下面程序中的createBiTree ()。

完整程序如下:
#include "stdio.h"
#include "malloc.h"
#define MAXSIZE 100
typedef char DataType;
typedef struct Node/* 二叉链表存储结构 */
{ DataType data;
struct Node *lchild,*rchild;
}BiTree;
typedef BiTree* SElemType ; /* 栈中数据元素类型,栈中保存结点指针 */ typedef struct
{ SElemType data[MAXSIZE];
int top;
}SeqStack; /* 栈的类型定义,顺序栈 */
/* 栈的基本操作的实现 */
SeqStack *initSeqStack() /*初始化栈*/
{SeqStack *s; /*首先建立栈空间,然后初始化栈顶指针*/
s=(SeqStack*)malloc(sizeof(SeqStack));
s->top= -1;
return s;
}
int push (SeqStack *s, SElemType x)
{if (s->top==MAXSIZE-1) /*栈满不能入栈*/
{ printf("overflow"); return 0;
}
s->top++;
s->data[s->top]=x;
return 1;
}
void pop (SeqStack *s) /*出栈,假设栈不空*/
{s->top--;
}
int empty (SeqStack *s)
{if (s->top== -1)
return 1;
else return 0;
}
SElemType top (SeqStack *s) /*设栈不空*/
{ return (s->data[s->top] );
}
/* 二叉链表的基本操作的实现 */
BiTree* createBiTree () /* 创建二叉链表——递归算法 */ { DataType ch;
BiTree * T;
ch=getchar();
if(ch=='#') return NULL;
else
{ T=(BiTree *)malloc(sizeof(BiTree));
T->data=ch;
T->lchild=createBiTree();
T->rchild=createBiTree();
return T;
}
}
void PreOrder(BiTree *T) /* 前序遍历二叉树的递归算法 */
{ if(T)
{ printf("%c",T->data);
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
void InOrder(BiTree * T) /* 中序遍历二叉树的递归算法 */
{ if(T)
{ InOrder (T->lchild);
printf("%c",T->data);
InOrder (T->rchild);
}
}
void PostOrder (BiTree * T)/* 后序遍历二叉树的递归算法*/ { if(T)
{ PostOrder (T->lchild);
PostOrder (T->rchild);
printf("%c",T->data);
}
}
void PreOrderFei(BiTree *p) /* 前序遍历二叉树的非递归算法 */ { SeqStack *s;
s=initSeqStack();。

相关文档
最新文档