天天看点

二叉树建立和遍历

#include "stdio.h"

#include "stdlib.h"

typedef char elemtype;

typedef struct btnode{

elemtype data;

struct btnode *lchild;

struct btnode *rchild;

}bitnode,*bitree;

bitree CreateBiTree()

{

bitree t;

char ch;

char a

scanf("%c",&ch);

a=getchar();             //这样才能识别输入完毕了, a接收回车符号

if(ch=='*')                //* 表示节点是叶子节点

  t=NULL;

else

{

t=(bitnode *)malloc(sizeof(bitnode));

t->data=ch;

t->lchild=CreateBiTree();

t->rchild=CreateBiTree();

}

return t; 

}

void PreOrder(bitree bt)

{

if(bt!=NULL){

printf("%c",bt->data);

PreOrder(bt->lchild);

PreOrder(bt->rchild);

}

}

void MidOrder(bitree bt)

{

if(bt!=NULL){

MidOrder(bt->lchild);

printf("%c",bt->data);

MidOrder(bt->rchild);

}

}

void PostOrder(bitree bt)

{

if(bt!=NULL){

PostOrder(bt->lchild);

PostOrder(bt->rchild);

printf("%c",bt->data);

}

}

main()

{

  bitree bt1;

  printf("创建二叉树:/n");

  bt1=CreateBiTree();

  printf("先序遍历二叉树递归算法:/n");

  PreOrder(bt1);

  printf("中序遍历二叉树递归算法:/n");

  MidOrder(bt1);

  printf("后序遍历二叉树递归算法:/n");

  PostOrder(bt1);

}

//-------------------------------------------------------

输入为:

A

B

C

*

D

*

*

E

*

*

F

*

H

*

*

//----------------------------------------------------------------

继续阅读