主题:高 手 帮 忙 看 一 下
二、2叉树的基本操作
0.建立二叉树
1.先序递归遍历形式
2.中序递归遍历形式
3.后序递归遍历形式
4.计算所有结点个数
5.计算叶子结点个数
6.计算树的深度
7.查到相同的元素
8.退出
#include<stdio.h>
#include<stdlib.h>
typedef int Etype;
typedef struct BiTNode /* 树结点结构 */
{ Etype data;
struct BiTNode *lch,*rch;
}BiTNode;
/* 函数原形声明 */
BiTNode *creat_bt1();
void PreOrderTraverse(BiTNode *p);
void inorderTraverse(BiTNode *p);
void PostOrderTraverse(BiTNode *p);
void BSTreeCount(BiTNode *p);
void BSTreeLeafCount(BiTNode *p);
void BSTreeDepth(BiTNode *p);
BiTNode *t;
/* 主函数 */
main()
{ char ch; int k;
do { printf("\n\n\n");
printf("\n\n 0. 建立二叉树");
printf("\n\n 1. 先序递归遍历二叉树");
printf("\n\n 2. 中序递归遍历二叉树");
printf("\n\n 3. 后序递归遍历二叉树");
printf("\n\n 4. 计算所有结点个数");
printf("\n\n 5. 计算所有结点个数");
printf("\n\n 6. 计算树的深度");
printf("\n\n 7. 查到相同的元素");
printf("\n\n 8. 结束程序运行");
printf("\n======================================");
printf("\n 请输入您的选择 (0,1,2,3,4,5,6,7,8)"); scanf("%d",&k);
switch(k)
{
case 0:t=creat_bt1( );break; /* 调用递归建立二叉树算法 */
case 1: { preOrderTraverse(t); /* 调用先序遍历 */
printf("\n\n 打回车键,继续。"); ch=getch();
} break;
case 2: { inorderTraverse(t); /* 调用中序遍历 */
printf("\n\n 打回车键,继续。"); ch=getch();
} break;
case 3: { PostOrderTraverse(t); /* 调用后序遍历 */
printf("\n\n 打回车键,继续。"); ch=getch();
} break;
case 4:{ BSTreeCount(t); /* 调用求二叉树中所有结点数函数 */
printf("\n\n 打回车键,继续。“); ch=getch();
} break;
case 5:{ BSTreeLeafCount(t); /* 调用求二叉树中所有叶子结点数函数 */
printf("\n\n 打回车键,继续."); ch=getch();
}break;
case 6:{ BSTreeDepth(t);
printf("\n\n 打回车键,继续."); ch=getch();
} break;
case 7:
case 8: exit(0);
} /* switch */
printf("\n ----------------");
}while(k>=0 && k<8);
printf("\n 再见!");
printf(“\n 打回车键,返回。“); ch=getch();
} /* main */
/* 模仿先序递归遍历方法,建立二叉树 */
BiTNode *creat_bt1()
{ BiTNode *t;
printf("\n data="); scanf("%d",&e);
if(e==0) t=NULL; /* 对于0值,不分配新结点 */
else { t=(BiTNode *)malloc(sizeof(BiTNode));
t->data=e;
t->lch=creat_bt1(); /* 左孩子获得新指针值 */
t->rch=creat_bt1(); /* 右孩子获得新指针值 */
}
return(t);
} /* creat_bt1 */
/* 先序递归遍历二叉树 */
void preOrderTraverse(BiTNde *p)
{ if (p) { printf("%3d",p->data);
PreOrderTraverse(p->lch);
PreOrderTraverse(p->rch);
}
} /* preOrderTraverse */
/* 中序递归遍历二叉树 */
void inorderTraverse(BiTNode *p)
{ if (p) { inorderTraverse(p->lch);
printf("%3d",p->data);
inorderTraverse(p->rch);
}
} /* inorderTraverse */
/* 后序递归遍历二叉树 */
void PostOrderTraverse(BiTNode *p)
{ if(p) { PostOrderTraverse(p->lch);
PostOrderTraverse(p->rch);
printf("%3d",p-.>data);
}
} /* PostOrderTraverse */
/* 计算二叉树中所有结点数 */
void BSTreeCount(BiTNode *p)
{
if(p==NULL) return 0;
else
return BSTreeCount(p->lch)+BSTreeCount(p->rch)+1;
}/* BSTreeCount */
/* 计算二叉树中所有叶子结点数 */
void BSTreeLeafCount(BiTNode *p)
{
if(p==NULL) return 0;
else if(p->lch==NULL && p->rch==NULL) return 1;
else return BSTreeLeafCount(p->lch)+BSTreeLeafCount(p->rch);
}/* BSTreeLeafCount */
/* 计算二叉树的深度 */
void BSTreeDepth(BiTNode *p)
{
if(p==NULL)
return 0; /* 对于空树,返回0并结束递归 */
else
{
int dep1=BSTreeDepth(p->lch); /* 计算左子树的深度 */
int dep2=BSTreeDepth(p->rch); /* 计算右子树的深度 */
if(dep1>dep2) return dep1+1; /* 返回树的深度 */
else return dep2+1;
}
}/* BSTreeDepth */
编 了 一 下 竟 有 26个 错 误 请 高 手 指 教
还 有 第 七 个 问 题 怎 么 编 啊 谢 谢
0.建立二叉树
1.先序递归遍历形式
2.中序递归遍历形式
3.后序递归遍历形式
4.计算所有结点个数
5.计算叶子结点个数
6.计算树的深度
7.查到相同的元素
8.退出
#include<stdio.h>
#include<stdlib.h>
typedef int Etype;
typedef struct BiTNode /* 树结点结构 */
{ Etype data;
struct BiTNode *lch,*rch;
}BiTNode;
/* 函数原形声明 */
BiTNode *creat_bt1();
void PreOrderTraverse(BiTNode *p);
void inorderTraverse(BiTNode *p);
void PostOrderTraverse(BiTNode *p);
void BSTreeCount(BiTNode *p);
void BSTreeLeafCount(BiTNode *p);
void BSTreeDepth(BiTNode *p);
BiTNode *t;
/* 主函数 */
main()
{ char ch; int k;
do { printf("\n\n\n");
printf("\n\n 0. 建立二叉树");
printf("\n\n 1. 先序递归遍历二叉树");
printf("\n\n 2. 中序递归遍历二叉树");
printf("\n\n 3. 后序递归遍历二叉树");
printf("\n\n 4. 计算所有结点个数");
printf("\n\n 5. 计算所有结点个数");
printf("\n\n 6. 计算树的深度");
printf("\n\n 7. 查到相同的元素");
printf("\n\n 8. 结束程序运行");
printf("\n======================================");
printf("\n 请输入您的选择 (0,1,2,3,4,5,6,7,8)"); scanf("%d",&k);
switch(k)
{
case 0:t=creat_bt1( );break; /* 调用递归建立二叉树算法 */
case 1: { preOrderTraverse(t); /* 调用先序遍历 */
printf("\n\n 打回车键,继续。"); ch=getch();
} break;
case 2: { inorderTraverse(t); /* 调用中序遍历 */
printf("\n\n 打回车键,继续。"); ch=getch();
} break;
case 3: { PostOrderTraverse(t); /* 调用后序遍历 */
printf("\n\n 打回车键,继续。"); ch=getch();
} break;
case 4:{ BSTreeCount(t); /* 调用求二叉树中所有结点数函数 */
printf("\n\n 打回车键,继续。“); ch=getch();
} break;
case 5:{ BSTreeLeafCount(t); /* 调用求二叉树中所有叶子结点数函数 */
printf("\n\n 打回车键,继续."); ch=getch();
}break;
case 6:{ BSTreeDepth(t);
printf("\n\n 打回车键,继续."); ch=getch();
} break;
case 7:
case 8: exit(0);
} /* switch */
printf("\n ----------------");
}while(k>=0 && k<8);
printf("\n 再见!");
printf(“\n 打回车键,返回。“); ch=getch();
} /* main */
/* 模仿先序递归遍历方法,建立二叉树 */
BiTNode *creat_bt1()
{ BiTNode *t;
printf("\n data="); scanf("%d",&e);
if(e==0) t=NULL; /* 对于0值,不分配新结点 */
else { t=(BiTNode *)malloc(sizeof(BiTNode));
t->data=e;
t->lch=creat_bt1(); /* 左孩子获得新指针值 */
t->rch=creat_bt1(); /* 右孩子获得新指针值 */
}
return(t);
} /* creat_bt1 */
/* 先序递归遍历二叉树 */
void preOrderTraverse(BiTNde *p)
{ if (p) { printf("%3d",p->data);
PreOrderTraverse(p->lch);
PreOrderTraverse(p->rch);
}
} /* preOrderTraverse */
/* 中序递归遍历二叉树 */
void inorderTraverse(BiTNode *p)
{ if (p) { inorderTraverse(p->lch);
printf("%3d",p->data);
inorderTraverse(p->rch);
}
} /* inorderTraverse */
/* 后序递归遍历二叉树 */
void PostOrderTraverse(BiTNode *p)
{ if(p) { PostOrderTraverse(p->lch);
PostOrderTraverse(p->rch);
printf("%3d",p-.>data);
}
} /* PostOrderTraverse */
/* 计算二叉树中所有结点数 */
void BSTreeCount(BiTNode *p)
{
if(p==NULL) return 0;
else
return BSTreeCount(p->lch)+BSTreeCount(p->rch)+1;
}/* BSTreeCount */
/* 计算二叉树中所有叶子结点数 */
void BSTreeLeafCount(BiTNode *p)
{
if(p==NULL) return 0;
else if(p->lch==NULL && p->rch==NULL) return 1;
else return BSTreeLeafCount(p->lch)+BSTreeLeafCount(p->rch);
}/* BSTreeLeafCount */
/* 计算二叉树的深度 */
void BSTreeDepth(BiTNode *p)
{
if(p==NULL)
return 0; /* 对于空树,返回0并结束递归 */
else
{
int dep1=BSTreeDepth(p->lch); /* 计算左子树的深度 */
int dep2=BSTreeDepth(p->rch); /* 计算右子树的深度 */
if(dep1>dep2) return dep1+1; /* 返回树的深度 */
else return dep2+1;
}
}/* BSTreeDepth */
编 了 一 下 竟 有 26个 错 误 请 高 手 指 教
还 有 第 七 个 问 题 怎 么 编 啊 谢 谢