二叉树的应用

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

二叉树的应用

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

二叉树的应用.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);/*若结点存在左孩子,则左孩子结点指针进队*/

相关文档
最新文档