二叉树及其应用(算法与数据结构课程设计) 下载本文

/* 先序遍历二叉树*/

void PreOrderTraverse(BiTreeLink T) { if (T)

{ printf(\

PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } }

/*求二叉树节点所在层次数*/

int CengciTree(BiTreeLink T,char c) {

int n=1,front=0,rear=0,flag; BiTreeLink queue[MAXSIZE];// if(!T) {

printf(\树为空!\\n\ return n; }

if(T->data==c) return n;

queue[rear++]=T->lchild; queue[rear++]=T->rchild; queue[rear++]=T; n++;

while((front+1)%MAXSIZE!=rear) {

flag=0;

if(queue[front]&&queue[front]->data==c) return n; if(queue[front]==T) {

n++; flag=1; }

else if(queue[front]) {

queue[rear]=queue[front]->lchild; rear=(rear+1)%MAXSIZE;

queue[rear]=queue[front]->rchild; rear=(rear+1)%MAXSIZE; }

if(flag) {

queue[rear]=T;

rear=(rear+1)%MAXSIZE; }

wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802

front=(front+1)%MAXSIZE; }

printf(\元素%c不存在。\\n\ return -1; }

/****主函数****/ int main() {

BiTreeLink T; int c=0; char x;

printf(\请输入节点\\n\ printf(\先序:\ printf(\请输入节点:\ getchar();

printf(\请输入要查询的字符:\ scanf(\

printf(\所在层次=\\n\\n\ system(\ return 0; }

3、以同学录为例,利用二叉树存储结构,实现建立、查找、新增、删除等功能。 #include \#include \#include \

/****二叉链树的类型定义****/ typedef struct Info{

char name[20]; //姓名 char date[11]; //生日 char phone[12]; //电话 char StudentNum[11];//学号 }DataType;

typedef struct Node { DataType data;

struct Node *left,*right; }BTNode, *PBTNode,*BiTree; /*****插入(左孩子)****/

PBTNode InsertLeft(PBTNode T,DataType x) { PBTNode p;

if(!T) return NULL; if(T->left ==NULL)

{ p=(PBTNode)malloc(sizeof(BTNode)); p->data=x; p->left =NULL;

wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802

p->right =NULL; T->left =p; return p;} return NULL; }

/*****插入(右孩子)****/

PBTNode InsertRight(PBTNode T,DataType x) { PBTNode p;

if(!T) return NULL; if(T->right ==NULL)

{ p=(PBTNode)malloc(sizeof(BTNode)); p->data=x; p->left =NULL; p->right =NULL; T->right =p; return p;} return NULL; }

/*****插入****/

void InsertChild(PBTNode T,DataType x)

{ if (T->left==NULL && T->right==NULL && !strcmp(T->data.name ,\无\ {T->data=x;}

else if (InsertLeft(T,x)) return; else{

if (InsertRight(T,x)) return; else InsertChild(T->left ,x);} }

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

void CreateBiTree(DataType *items,BiTree *T) { int i;

printf(\本程序通过预置数组建立二叉树\\n\ (*T)=(PBTNode)malloc(sizeof(BTNode)); (*T)->left=NULL; (*T)->right=NULL; (*T)->data=items[0]; for(i=1;i<4;i++)

{ InsertChild(*T,items[i]);} }

/****先序遍历二叉树****/

void PreOrderTraverse(BiTree T) { if (T)

{printf(\姓名\\t\\t学号\\t\\t生日\\t\\t电话\\n\

printf(\.date,T->data.phone);

wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802

PreOrderTraverse(T->left); PreOrderTraverse(T->right); } }

/****查找二叉树****/

PBTNode SearchTree(BiTree T,char *ch) { PBTNode flag=NULL; if (T)

{ if(!strcmp(T->data.name,ch)) {

printf(\e,T->data.phone);

flag=T; return flag; }

else flag=SearchTree(T->left,ch); if(flag) return flag; else

flag=SearchTree(T->right,ch); }

return flag; }

/****查找父亲节点****/

PBTNode SearchFather(PBTNode r,BiTree T,int *flag) { PBTNode p=NULL; if(T)

{ if(T->left==r)

{(*flag)=0; p=T;return p;}//flag=0表示左孩子的父亲 else if(T->right==r)

{(*flag)=1; p=T;return p;} else

{p=SearchFather(r,T->left,flag); if(p) return p;

else p=SearchFather(r,T->right,flag);} }

return p; }

/****修改二叉树****/

void ModifyTree(BiTree T)

{ char ch[20],Mod[12]; PBTNode ModifyNode; int caseflag; printf(\请输入要修改信息的姓名:\ ModifyNode=SearchTree(T,ch); if(!ModifyNode)

printf(\查找的姓名不存在\\n\ else

{while(1){

wilyes11收集 博客(与学习无关):http://blog.sina.com.cn/u/1810231802