二叉树的实现(C语言)

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include

#include

struct Tree;

typedef Tree* BinTree;

typedef char BinTreeNode;

struct Tree

{

char data;

BinTree left;

BinTree right;

};

BinTree createEmptyBinTree(void) //创建一棵空的二叉树。

{

BinTree p;

p=(BinTree)malloc(sizeof(Tree));

return p;

}

int isNull ( BinTree t ) //判断二叉树t是否为空。

{

if(t==NULL)

{

printf("此二叉树为空!\n");

return 0;

}

else

return 1;

}

BinTree consBinTree()//建立一棵二叉树,其根结点是root,左右二叉树分别为left和right {

BinTree root;

char ch;

scanf("%c",&ch);

if ((ch>='A'&&ch<='Z')||(ch>='a'&&ch<='z'))

{

root=createEmptyBinTree();

root->data=ch;

root->left=consBinTree();

root->right=consBinTree();

}

else

root=NULL;

return root;

}

BinTreeNode root( BinTree t )//返回二叉树t的根结点。若为空二叉树,则返回一特殊值。{

if(t==NULL)

return NULL;

else

return t->data;

}

void visit(BinTreeNode c)

{

printf("%c ",c);

}

BinTree leftChild( BinTree t )//返回t结点的左子树,当指定结点没有左子树时,返回一个特殊值。

{

if(t->left==NULL)

return NULL;

else

return t->left;

}

BinTree rightChild( BinTree t)//返回p结点的右子树,当指定结点没有右子树时,返回一个特殊值。

{

if(t->right==NULL)

return NULL;

else

return t->right;

}

void preOrder( BinTree t)//显示先根周游序列

{

if(t!=NULL)

{

visit(root(t));

preOrder(leftChild(t));

preOrder(rightChild(t));

}

}

void inOrder(BinTree t)//显示中根周游序列

{

if (t!=NULL)

{

inOrder(leftChild(t));

visit(root(t));

inOrder(rightChild(t));

}

}

void postOrder(BinTree t)//显示后根周游序列

{if (t!=NULL)

{

postOrder(leftChild(t));

postOrder(rightChild(t));

visit(root(t));

}

}

void show(BinTree t,int len)//数的形状

{

if (t!=NULL)

{

show(t->right,len+1);

for (int i=1;i<=len;i++)

{

printf(" ");

}

printf("%c\n",t->data);

show(t->left,len+1);

}

}

int main()

{

BinTree p1;

int k=1,num;

while(k)

{

printf("\n&&&&&&&&&&&&&&输入序号执行相应操作&&&&&&&&&&&&&&&&&\n");

printf(" 输入1,建立一个二叉树!\n");

printf("---------------------------------------------------\n");

printf(" 输入2,查看建立的二叉树!\n");

printf("---------------------------------------------------\n");

printf(" 输入3,先根周游二叉树!\n");

printf("---------------------------------------------------\n");

printf(" 输入4,中根周游二叉树!\n");

printf("---------------------------------------------------\n");

printf(" 输入5,后根周游二叉树!\n");

printf("---------------------------------------------------\n");

printf(" 输入其他,退出操作!\n");

printf("---------------------------------------------------\n");

scanf("%d",&num);

switch (num)

{

case 1 :

while(!(p1=consBinTree()))

printf("请按照先根顺序输入二叉树元素(大小写字母),空格代表子树为空\n");

if(p1)

printf("二叉树建立成功!\n");

else

printf("二叉树建立失败!\n");

break;

case 2 :

{

printf("建立的二叉树形状为:\n\n");

if(isNull(p1))

show(p1,0);

}

break;

case 3 :

{

printf("先根周游序列为:\n");

preOrder(p1);

printf("\n");

}

break;

case 4 :

{

printf("中根周游序列为:\n");

inOrder(p1);

printf("\n");

}

break;

相关文档
最新文档