/* 先序遍历二叉树*/
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