二叉树的各种算法.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

二叉树得各种算法、txt男人得承诺就像80岁老太太得牙齿,很少有真得。您嗜烟成性得时候,只有三种人会高兴,医生?您得仇人与卖香烟得。?? ???/*用函数实现如下二叉排序树算法:

(1)插入新结点

(2)前序、中序、后序遍历二叉树

(3)中序遍历得非递归算法

(4)层次遍历二叉树

(5)在二叉树中查找给定关键字(函数返回值为成功1,失败0)

(6)交换各结点得左右子树

(7)求二叉树得深度

(8)叶子结点数

Input

第一行:准备建树得结点个数n

第二行:输入n个整数,用空格分隔

第三行:输入待查找得关键字

第四行:输入待查找得关键字

第五行:输入待插入得关键字

Output

第一行:二叉树得先序遍历序列

第二行:二叉树得中序遍历序列

第三行:二叉树得后序遍历序列

第四行:查找结果

第五行:查找结果

第六行~第八行:插入新结点后得二叉树得先、中、序遍历序列

第九行:插入新结点后得二叉树得中序遍历序列(非递归算法)

第十行:插入新结点后得二叉树得层次遍历序列

第十一行~第十三行:第一次交换各结点得左右子树后得先、中、后序遍历序列

第十四行~第十六行:第二次交换各结点得左右子树后得先、中、后序遍历序列

第十七行:二叉树得深度

第十八行:叶子结点数

*/

#include”stdio、h”

#include"malloc、h

#defineTRUE1

#defineFALSE0

#defineOK1

#defineERROR0

#defineINFEASIBLE-1

#defineOVERFLOW-2

typedefintStatus;

typedefintKeyType;

#defineSTACK_INIT_SIZE100//存储空间初始分配量

#defineSTACKINCREMENT10//存储空间分配增量

#defineMAXQSIZE100

typedefintElemType;

typedefstructBiTNode{

ElemTypedata;

structBiTNode*lchild,*rchild;//左右孩子指针

}BiTNode,*BiTree;

StatusSearchBST(BiTreeT,KeyTypekey,BiTreef,BiTreep)

if(!T){p=f;returnFALSE;}

elseif(key==T-data){p=T;returnTRUE;}

elseif(key〈T—data)returnSearchBST(T—lchild,key,T,p);

elsereturn(SearchBST(T—〉rchild,key,T,p));

}

StatusInsertBST(BiTree&T,ElemTypee)

BiTrees,p;

if(!SearchBST(T,e,NULL,p))

{

s=(BiTree)malloc(sizeof(BiTNode));

?s—data=e;s->lchild=s-rchild=NULL;

if(!p)T=s;

elseif(ep-data)p-〉lchild=s;

elsep—〉rchild=s;

? returnTRUE;

?}

elsereturnFALSE;

}

StatusPrintElement(ElemTypee){//输出元素e得值

printf("%d”,e);

returnOK;

}//PrintElement

StatusPreOrderTraverse(BiTreeT,Status(*Visit)(ElemType)){

//前序遍历二叉树T得递归算法,对每个数据元素调用函数Visit。

//补全代码,可用多个语句

if(T)

?{

? if(Visit(T—〉data))

? if(PreOrderTraverse(T-lchild,Visit))

if(PreOrderTraverse(T—〉rchild,Visit))returnOK;

???returnERROR;

?}

?elsereturnOK;

}//PreOrderTraverse

StatusInOrderTraverse(BiTreeT,Status(*Visit)(ElemType))

{

//中序遍历二叉树T得递归算法,对每个数据元素调用函数Visit.

//补全代码,可用多个语句

?if

文档评论(0)

155****5675 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档