Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->编程语言 ->CGI ->正文

二叉树的集合操作

来源:Linuxdby.com 作者:Webmaster 时间:2007-04-28 点击: [收藏] [投稿]
以下程序源代码:

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define NULL 0
#define DataType char
typedef struct BinTreeNode *PBinTreeNode;
typedef PBinTreeNode *PBinTree;

struct BinTreeNode
{ DataType info;
PBinTreeNode llink;
PBinTreeNode rlink;
};
PBinTreeNode Create_BinTree(void);

PBinTree Create_BinTreeRoot(void)
{PBinTree pbtree;
pbtree=(PBinTree)malloc(sizeof(struct BinTreeNode));
if(pbtree==NULL) pbtree=(PBinTree)realloc(pbtree,sizeof(struct BinTreeNode));
*pbtree=Create_BinTree();
return (pbtree);
}

PBinTreeNode Create_BinTreeNode(void)
{PBinTreeNode pbnode;
pbnode=(PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(pbnode==NULL) pbnode=(PBinTreeNode)realloc(pbnode,sizeof(struct BinTreeNode));
else pbnode->llink=pbnode->rlink=(PBinTreeNode)NULL;
return (pbnode);
}

int isalphabet(char i)
{
if (i >= 'a' && i <='z' || i >= 'A' && i <='Z' || i=='@')
return 1;
else return 0;
}

PBinTreeNode Create_BinTree(void)
{PBinTreeNode pbnode ;
DataType i;
printf("Please input a char:\t");
fflush(stdin);
scanf("%c",&i);
fflush(stdin);
while(!isalphabet(i))
{
printf("Sorry, your input char is not in alphabet, please input again:");
scanf("%c",&i);
fflush(stdin);
}
if(i=='@') pbnode= NULL;
else
{
pbnode = (PBinTreeNode)malloc(sizeof(struct BinTreeNode));
if(pbnode == NULL)
{
printf("Out of space!\n");
return pbnode ;
}
pbnode->info=i;
pbnode->llink=Create_BinTree();
pbnode->rlink=Create_BinTree();
}
return pbnode;
}

void outputTree(PBinTreeNode pbnode,int totalSpace)
{int i;
if(pbnode!=NULL)
{
totalSpace+=5;
outputTree(pbnode->rlink,totalSpace);
for(i=0;i<totalSpace;i++) printf(" ");
printf("%c\n",pbnode->info);
outputTree(pbnode->llink,totalSpace);
}
}

void preOrder(PBinTreeNode pbnode)
{
if(pbnode==NULL) return ;
printf("%c\t",pbnode->info);
preOrder(pbnode->llink);
preOrder(pbnode->rlink);
}

void inOrder(PBinTreeNode pbnode)
{
if(pbnode== NULL) return;
inOrder(pbnode->llink);
printf("%c\t",pbnode->info);
inOrder(pbnode->rlink);
}

void postOrder(PBinTreeNode pbnode)
{
if(pbnode == NULL) return ;
postOrder(pbnode->llink);
postOrder(pbnode->rlink);
printf("%c\t", pbnode->info);
}
void leaves(PBinTreeNode pbnode)
{
if(pbnode->llink != NULL && pbnode->rlink == NULL)
leaves(pbnode->llink);
if(pbnode->rlink != NULL && pbnode->llink == NULL)
leaves(pbnode->rlink);
if(pbnode->llink != NULL && pbnode->rlink != NULL)
{
leaves(pbnode->llink);
leaves(pbnode->rlink);
}
if(pbnode->llink == NULL && pbnode->rlink == NULL)
{
printf("%c\t",pbnode->info);
return;
}
}
void freeAllNodes(PBinTreeNode pbnode)
{
if(pbnode->llink != NULL && pbnode->rlink == NULL)
freeAllNodes(pbnode->llink);
if(pbnode->rlink != NULL && pbnode->llink == NULL)
freeAllNodes(pbnode->rlink);
if(pbnode->llink != NULL && pbnode->rlink != NULL)
{
freeAllNodes(pbnode->llink);


freeAllNodes(pbnode->rlink);
}
if(pbnode->llink == NULL && pbnode->rlink == NULL)
{
free(pbnode->llink);
free(pbnode->rlink);
pbnode = NULL;
return ;
}
}

int main()
{PBinTree pbtree;
int i;
int totalSpace = 0;
printf("Please input char to the binatree,@ to exit current node:\n");
pbtree = Create_BinTreeRoot();
printf("Display the binatree data directly:\n");
outputTree(*pbtree,totalSpace);
printf("Please choose the mode you want to operate with the binatree:\n");
printf("1.display 2.preOrder 3.inOrder 4.postOrder 5.leaves 6.free nodes 0 to exit:");
scanf("%d",&i);
while(i>6 || i<0)
{
printf("\nYou choice is illegal please input again:\n");
printf("1.display 2.preOrder 3.inOrder 4.postOrder 5.leaves 6.free nodes 0 to exit:");
scanf("%d",&i);
}
while(i!=0)
{
while(i > 6 || i<0)
{
printf("\nYou choice is illegal please input again:\n");
printf("1.display 2.preOrder 3.inOrder 4.postOrder 5.leaves 6.free nodes 0 to exit:");
scanf("%d",&i);
}
while(i !=0)
{
while(i > 6 || i<0)
{
printf("\nYou choice is illegal please input again:\n");
printf("1.display 2.preOrder 3.inOrder 4.postOrder 5.leaves 6.free nodes 0 to exit:");


scanf("%d",&i);
}
while(i !=6)

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:外部准确测试你的脚本执行时间   下一篇:一种html模版输出方式

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号