二叉树在C语言中的实现与应用详解文档格式.docx

上传人:b****1 文档编号:13568342 上传时间:2022-10-11 格式:DOCX 页数:10 大小:16.75KB
下载 相关 举报
二叉树在C语言中的实现与应用详解文档格式.docx_第1页
第1页 / 共10页
二叉树在C语言中的实现与应用详解文档格式.docx_第2页
第2页 / 共10页
二叉树在C语言中的实现与应用详解文档格式.docx_第3页
第3页 / 共10页
二叉树在C语言中的实现与应用详解文档格式.docx_第4页
第4页 / 共10页
二叉树在C语言中的实现与应用详解文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

二叉树在C语言中的实现与应用详解文档格式.docx

《二叉树在C语言中的实现与应用详解文档格式.docx》由会员分享,可在线阅读,更多相关《二叉树在C语言中的实现与应用详解文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

二叉树在C语言中的实现与应用详解文档格式.docx

/*1.初始化二叉树*/

voidinitBTree(structBTreeNode**bt)

{

*bt=NULL;

return;

}

/*2.建立二叉树(根据a所指向的二叉树广义表字符串建立)*/

voidcreateBTree(structBTreeNode**bt,char*a)

structBTreeNode*p;

structBTreeNode*s[STACK_MAX_SIZE];

/*定义s数组为存储根结点指针的栈使用*/

inttop=-1;

/*定义top作为s栈的栈顶指针,初值为-1,表示空栈*/

intk;

/*用k作为处理结点的左子树和右子树,k=1处理左子树,k=2处理右子树*/

inti=0;

/*用i扫描数组a中存储的二叉树广义表字符串,初值为0*/

/*把树根指针置为空,即从空树开始建立二叉树*/

/*每循环一次处理一个字符,直到扫描到字符串结束符\0为止*/

while(a[i]!

='

\0'

){

switch(a[i]){

case'

'

:

break;

/*对空格不作任何处理*/

('

if(top==STACK_MAX_SIZE-1){

printf("

栈空间太小!

\n"

);

exit

(1);

top++;

s[top]=p;

k=1;

)'

if(top==-1){

二叉树广义表字符串错误!

top--;

'

k=2;

default:

p=newBTreeNode;

p->

data=a[i];

left=p->

right=NULL;

if(*bt==NULL){

*bt=p;

}else{

if(k==1){

s[top]->

left=p;

right=p;

i++;

/*为扫描下一个字符修改i值*/

/*3.检查二叉树是否为空,为空则返回1,否则返回0*/

intemptyBTree(structBTreeNode*bt)

if(bt==NULL){

return1;

return0;

/*4.求二叉树深度*/

intBTreeDepth(structBTreeNode*bt)

/*对于空树,返回0结束递归*/

intdep1=BTreeDepth(bt->

left);

/*计算左子树的深度*/

intdep2=BTreeDepth(bt->

right);

/*计算右子树的深度*/

if(dep1>

dep2){

returndep1+1;

returndep2+1;

/*5.从二叉树中查找值为x的结点,若存在则返回元素存储位置,否则返回空值*/

elemType*findBTree(structBTreeNode*bt,elemTypex)

returnNULL;

if(bt->

data==x){

return&

(bt->

data);

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

elemType*p;

if(p=findBTree(bt->

left,x)){

returnp;

right,x)){

/*6.输出二叉树(前序遍历)*/

voidprintBTree(structBTreeNode*bt)

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

if(bt!

=NULL){

%c"

bt->

/*输出根结点的值*/

left!

=NULL||bt->

right!

("

printBTree(bt->

"

)"

}

/*7.清除二叉树,使之变为一棵空树*/

voidclearBTree(structBTreeNode**bt)

if(*bt!

clearBTree(&

((*bt)->

left));

right));

free(*bt);

/*8.前序遍历*/

voidpreOrder(structBTreeNode*bt)

%c"

/*访问根结点*/

preOrder(bt->

/*前序遍历左子树*/

/*前序遍历右子树*/

/*9.前序遍历*/

voidinOrder(structBTreeNode*bt)

inOrder(bt->

/*中序遍历左子树*/

/*中序遍历右子树*/

/*10.后序遍历*/

voidpostOrder(structBTreeNode*bt)

postOrder(bt->

/*后序遍历左子树*/

/*后序遍历右子树*/

/*11.按层遍历*/

voidlevelOrder(structBTreeNode*bt)

structBTreeNode*q[QUEUE_MAX_SIZE];

intfront=0,rear=0;

/*将树根指针进队*/

rear=(rear+1)%QUEUE_MAX_SIZE;

q[rear]=bt;

while(front!

=rear){/*队列非空*/

front=(front+1)%QUEUE_MAX_SIZE;

/*使队首指针指向队首元素*/

p=q[front];

p->

/*若结点存在左孩子,则左孩子结点指针进队*/

if(p->

typedefcharelemType;

elemTypedata;

structBTreeNode*left;

structBTreeNode*right;

*bt=NULL;

return;

intk;

inti=0;

switch(a[i])

if(top==STACK_MAX_SIZE-1)

);

exit

(1);

top++;

s[top]=p;

k=1;

p

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

当前位置:首页 > 考试认证 > 从业资格考试

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

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