二叉树的基本操作
#include <stdio.h>
#include<stdlib.h>
typedef char elemtype;
typedef struct btnode /*定义结点类型*/
{
elemtype data;
struct btnode *lchild,*rchild;
}bitnode,*bitree;
bitree createbitree()
{
bitree t;
char ch;
scanf("%c",&ch);
if(ch==' ') t=NULL;
else
{
t=(bitnode *) malloc (sizeof(bitnode)); /*申请生成新的结点*/
t->data=ch;
t->lchild=createbitree(); /*递归构造左子树*/
t->rchild=createbitree(); /*递归构造右子树*/
}
return t;
}
void preordertraverse(bitree bt) /*先序遍历二叉树的递归算法*/
{
if(bt!=NULL)
{
printf("%c",bt->data); /*访问根结点*/
preordertraverse(bt->lchild); /*先序遍历左子树*/
preordertraverse(bt->rchild); /*先序遍历右子树*/
}
}
void inordertraverse(bitree bt) /*中序遍历二叉树的递归算法*/
{
if(bt!=NULL)
{
inordertraverse(bt->lchild); /*先序遍历左子树*/
printf("%c",bt->data); /*访问根结点*/
inordertraverse(bt->rchild); /*先序遍历右子树*/
}
}
void postordertraverse(bitree bt) /*后序遍历二叉树的递归算法*/
{
if(bt!=NULL)
{
postordertraverse(bt->lchild); /*先序遍历左子树*/
postordertraverse(bt->rchild); /*先序遍历右子树*/
printf("%c",bt->data); /*访问根结点*/
}
}
void main()
{
bitree bt1;
printf("创建二叉树:\n");
bt1=createbitree();
printf("先序遍历结果:");
preordertraverse(bt1);
printf("\n");
printf("中序遍历结果:");
inordertraverse(bt1);
printf("\n");
printf("后序遍历结果:");
postordertraverse(bt1);
printf("\n");
}
运行结果: