二叉树原形:
因为要知道叶子结点(来结束子树),所以需要确定叶子结点的孩子,把叶子结点的孩子记为#
补充成完全二叉树(完全二叉树):
输入的时候,因为程序中是先序方法创建二叉树(当然也可以中序和后序),所以输入要按先序方法输入:ab#c##d#e##
二叉树先序,中序,后序遍历输出程序如下
#include <stdio.h>
#include <malloc.h>
typedef char TElemType;
typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
//创建二叉树
BiTree CreatBiTree(BiTree T)
{
char x;
scanf("%c",&x);
if(x=='#')
{
T=NULL;
}
else
{
T=(BiTree)malloc(sizeof(BiTNode));//根结点
if(!T)
{
printf("error");
}
T->data=x;
T->lchild=CreatBiTree(T->lchild);
T->rchild=CreatBiTree(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)
{
PreOrder(T->lchild);
printf("%c ",T->data);
PreOrder(T->rchild);
}
}
//后序
void LastOrder(BiTree T)
{
//左右根
if(T)
{
PreOrder(T->lchild);
PreOrder(T->rchild);
printf("%c ",T->data);
}
}
int main()
{
BiTree T=NULL;
int ch;
T=CreatBiTree(T);
while(1)
{
printf("1_PreOrder\n");
printf("2_InOrder\n");
printf("3_LastOrder\n");
printf("4_exit\n");
scanf("%d",&ch);
switch(ch)
{
case 1:printf("PreOrder is:");PreOrder(T);break;
case 2:printf("InOrder is:");InOrder(T);break;
case 3:printf("LastOrder is:");LastOrder(T);break;
case 4:return;
default:printf("input error!");
}
printf("\n");
}
return 0;
}
本文介绍如何使用先序遍历方式创建二叉树,并提供了先序、中序及后序遍历的C语言实现代码。通过示例说明了如何输入节点构建二叉树并选择不同的遍历方式查看输出。
4万+

被折叠的 条评论
为什么被折叠?



