二叉树的建立搜索
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "stdio.h"
#include "string.h"
#include
#define NULL 0
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Create(BiTree T){
char ch;
ch=getchar();
if(ch=='0')
T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
printf("Error!");
T->data=ch;
T->lchild=Create(T->lchild);
T->rchild=Create(T->rchild);
}
return T;
}
void Preorder(BiTree T){
if(T){
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}//先序遍历
void Inorder(BiTree T){
if(T){
Inorder(T->lchild);
printf("%c",T->data);
Inorder(T->rchild);
}
}//中序遍历
void Postorder(BiTree T){
if(T){
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c",T->data);
}
}//后序遍历
void main(){
BiTree T;int choice;
printf("前序输入二叉树的结点序列,以0表示结点为空,按回车结束:\n");
T=Create(T);
printf("选择遍历算法:先序遍历-1,中序遍历-2,后序遍历-3\n");
scanf("%d",&choice);
if(choice==1){
Preorder(T);
printf("\n");}
else if(choice==2){
Inorder(T);
printf("\n");}
else {Postorder(T);
printf("\n");}
}
//author: chby
//date: 2006-11-5
//description: 二叉树的递归操作
#include
#include
#include
typedef char DataType;
typedef struct node
{
DataType data;
struct node *lchild,*rchild;
}BiTNode;
typedef BiTNode * BiTree;
//建立二叉树
void CreateBiTree(BiTree * T)
{
char c;
printf("进入 CreateBiTree...\n");
scanf("%c",&c);
getchar();
if(c==" ")
{
printf("不产生子树。\n");
*T = NULL;
}
else
{
*T = (BiTNode *)malloc(sizeof(BiTNode)); //生成一个新节点
(*T)->data = c;
printf("产生左右子树。\n");
CreateBiTree(&(*T)->lchild); //生成左子树
CreateBiTree(&(*T)->rchild); //生成右子树
}
}
//前序遍历
void Preorder(BiTNode * T)
{
if(T)
{
printf("%c\n",T->data);
Preorder(T->lchild); //遍历左子树
Preorder(T->rchild); //遍历右子树
}
}
//中序遍历
void Inorder(BiTNode * T)
{
if(T)
{
Inorder(T->lchild)
;
printf("%c\n",T->data);
Inorder(T->rchild);
}
}
//后序遍历
void Postorder(BiTNode * T)
{
if(T)
{
Postorder(T->lchild);
Postorder(T->rchild);
printf("%c\n",T->data);
}
}
void main()
{
BiTree T = NULL;
char j;
int flag = 1;
//-------------程序解说---------------
printf("本程序实现二叉树的操作。\n");
printf("可以进行建立二叉树,递归先序、中序、后序遍历。\n");
printf("请将先序遍历二叉树的结果输入已建立二叉树。\n");
printf("对于叶子节点以空格表示。\n");
printf("例如:abc de g f (回车) 如下二叉树:\n");
printf(" a \n");
printf(" / \n");
printf(" b \n");
printf(" / \\ \n");
printf(" c d \n");
printf(" / \\ \n");
printf(" e f \n");
printf(" \\ \n");
printf(" g \n");
CreateBiTree(&T); //初始化树
while(flag)
{
printf("请选择: \n");
printf("1.递归先序遍历\n");
printf("2.递归中序遍历\n");
printf("3.递归后序遍历\n");
printf("4.退出程序\n");
scanf("%c",&j);
getchar();
switch(j)
{
case '1':
if(T)
{
printf("先序遍历二叉树:");
Preorder(T);
printf("\n");
}
else printf("二叉树为空!\n");
break;
case '2':
if(T)
{
printf("中序遍历二叉树:");
Inorder(T);
printf("\n");
}
else printf("二叉树为空!\n");
break;
case '3':
if(T)
{
printf("后序遍历二叉树:");
Postorder(T);
printf("\n");
}
else printf("二叉树为空!\n");
break;
default:
flag=0;printf("程序运行结束,按任意键退出!\n");
}
}
}