用递归和非递归算法实现二叉树地三种遍历Word下载.docx

上传人:b****2 文档编号:13313568 上传时间:2022-10-09 格式:DOCX 页数:16 大小:79.69KB
下载 相关 举报
用递归和非递归算法实现二叉树地三种遍历Word下载.docx_第1页
第1页 / 共16页
用递归和非递归算法实现二叉树地三种遍历Word下载.docx_第2页
第2页 / 共16页
用递归和非递归算法实现二叉树地三种遍历Word下载.docx_第3页
第3页 / 共16页
用递归和非递归算法实现二叉树地三种遍历Word下载.docx_第4页
第4页 / 共16页
用递归和非递归算法实现二叉树地三种遍历Word下载.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

用递归和非递归算法实现二叉树地三种遍历Word下载.docx

《用递归和非递归算法实现二叉树地三种遍历Word下载.docx》由会员分享,可在线阅读,更多相关《用递归和非递归算法实现二叉树地三种遍历Word下载.docx(16页珍藏版)》请在冰豆网上搜索。

用递归和非递归算法实现二叉树地三种遍历Word下载.docx

数据关系R:

假如D为空集,如此R为空集,称binarytree为空二叉树;

假如D不为空集,如此R为{H},H是如下二元关系;

(1)在D中存在唯一的称为根的数据元素root,它在关系H下无前驱;

(2)假如D-{root}不为空,如此存在D-{root}={D1,Dr},且D1∩Dr为空集;

(3)假如D1不为空,如此D1中存在唯一的元素x1,<

root,x1>

∈H,且存在D1上的关系H1是H的子集;

假如Dr不为空集,如此Dr中存在唯一的元素Xr,<

root,Xr>

∈H,且存在Dr上的关系Hr为H的子集;

H={<

<

H1,Hr};

(4)(D1,{H1})是一颗符合本定义的二叉树,称为根的左子树,(Dr,{Hr})是一颗符合本定义的二叉树,称为根的右子树。

根本操作:

Creatbitree(&

S,definition)

初始条件:

definition给出二叉树S的定义

操作结果:

按definition构造二叉树S

counter(T)

初始条件:

二叉树T已经存在

操作结果:

返回二叉树的总的结点数

onecount(T)

返回二叉树单分支的节点数

Clearbintree(S)

二叉树S已经存在

将二叉树S清为空树

Bitreeempty(S)

假如S为空二叉树,如此返回TRUE,否如此返回FALSE

Bitreedepth(S,&

e)

返回S的深度

Parent(S)

二叉树S已经存在,e是S中的某个结点

假如e是T的非根结点,如此返回它的双亲,否如此返回空

Preordertraverse(S)

二叉树S已经存在,Visit是对结点操作的应用函数。

先序遍历S,对每个结点调用函数visit一次且仅一次。

一旦visit失败,如此操作失败。

Inordertraverse(S,&

中序遍历S,对每个结点调用函数visit一次且仅一次。

Postordertraverse(&

S,e)

后序遍历S,对每个结点调用函数visit一次且仅一次。

}ADTBinarytree

五、详细设计

扩展先序遍历:

#include<

stdio.h>

stdlib.h>

#include<

string.h>

typedefstructbinarytree

{

chardata;

structbinarytree*lchild,*rchild;

}BiTreeNode,*BiTree;

voidCreateBiTree(BiTree*bt)

{charch;

ch=getchar();

if(ch=='

.'

)*bt=NULL;

else

*bt=(BiTreeNode*)malloc(sizeof(BiTreeNode));

(*bt)->

data=ch;

CreateBiTree(&

((*bt)->

lchild));

rchild));

}

voidPreOder(BiTreeroot)

{if(root!

=NULL)

{printf("

%4c"

root->

data);

PreOder(root->

lchild);

rchild);

main()

BiTreeroot;

root);

printf("

先序遍历:

\n"

);

PreOder(root);

递归算法:

#include"

stdio.h"

#definePRprintf

#defineERROR0

#defineMAX100

/*============================建立各结构体===============================*/

typedefstructnode

/*数据域*/

structnode*lchild;

structnode*rchild;

/*结点的左右指针,分别指向结点的左右孩子*/

}BTNode;

typedefBTNode*DataType;

typedefstruct

DataTypedata[MAX];

inttop;

}SeqStack;

SeqStack*s;

/*============================栈的操作===================================*/

SeqStack*createemptystacks()/*创建一个空栈*/

s=(SeqStack*)malloc(sizeof(SeqStack));

s->

top=0;

returns;

intstackemptys(SeqStack*s)/*判栈空*/

returns->

top==0;

intstackfulls(SeqStack*s)/*判栈满*/

top==MAX;

voidpushs(SeqStack*s,DataTypex)/*进栈*/

if(stackfulls(s))

PR("

overflow\n"

data[s->

top++]=x;

voidpops(SeqStack*s)/*退栈*/

if(stackemptys(s))

underflow\n"

top--;

DataTypegettops(SeqStack*s)/*栈非空时取栈顶元素*/

top-1];

/*============================建立二叉树==================================*/

BTNode*createbintree()/*输入扩大的先序序列,建立二叉树*/

BTNode*t;

charx;

scanf("

%c"

&

x);

if(x=='

#'

t=NULL;

/*读入#,返回空指针*/

t=(BTNode*)malloc(sizeof(BTNode));

/*生成结点*/

t->

data=x;

lchild=createbintree();

/*构造左子树*/

rchild=createbintree();

/*构造右子树*/

return(t);

/*==============================树的遍历===================================*/

voidpreorder(BTNode*t)/*NLR先序遍历*/

if(t!

=NULL)

%c\t"

t->

/*访问结点*/

preorder(t->

/*中序遍历左子树*/

preorder(t->

/*中序遍历右子树*/

/*=========================================================================*/

voidinorder(BTNode*t)/*LNR中序遍历*/

inorder(t->

PR("

inorder(t->

voidpostorder(BTNode*t)/*LRN后序遍历*/

postorder(t->

/*后序遍历左子树*/

/*后序遍历右子树*/

/*===============================主函数=============================-=======*/

voidmain()

BTNode*t;

intn=0;

->

>

请输入二叉树各元素:

(例如abd##e##cf##g##)\n"

//例如abd##e##cf##g##

t=createbintree();

\n\n->

1.按先序遍历输出为:

preorder(t);

/*NLR先序遍历*/

\n按中序遍历输出为:

inorder(t);

/*LNR中序遍历*/

\n按后序遍历输出为:

postorder(t);

/*LRN后序遍历*/

#defineTRUE1

#defineFALSE0

#defineStack_Size50

#defineNUM20

typedefstructbinarytree/*定义一棵二叉树*/

structbinarytree*LChild,*RChild;

}BiTNode,*BiTree;

typedefstruct/*定义顺序栈S*/

BiTreedata[Stack_Size];

inttop;

voidCreateBiTree(BiTree&

bt)/*利用“扩展先序遍历〞创建二叉链表*/

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1