二叉树的应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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);/*若结点存在左孩子,则左孩子结点指针进队*/