二叉树的遍历!

/*
 二叉树的遍历,前序遍历,中序遍历,后序遍历。
*/

#include<stdio.h>
#include<stdlib.h>
#define null 0
//定义结构体
struct BinaryTree
{
 char data;
 struct BinaryTree *Lchild;
 struct BinaryTree *Rchild;
};
typedef struct BinaryTree BiTree;

//建立二叉树
BiTree * createBiTree(BiTree *, int);
//前序遍历
void PreOrder(BiTree *);
//中序遍历
void MidOrder(BiTree *);
//后序遍历
void PostOrder(BiTree *);
//输出函数
void Visit(BiTree *);

int main()
{
 BiTree bt, *root;
 printf("printf code: \n"); /*输入格式为:先输入根节点,再输入
        左子树,右子树,没有则用@代替。*/
 root = createBiTree(&bt, 0);
 printf("前序遍历的结果是:");
 PreOrder(root);
 printf("\n");
 printf("中序遍历的结果是:");
 MidOrder(root);
 printf("\n");
 printf("后序遍历的结果是:");
 PostOrder(root);
 printf("\n");
 return 0;
}

BiTree * createBiTree(BiTree *s, int k)
{
 char c;
 BiTree *p, *t;
 scanf("%c", &c);
 if(c != '@')
 {
  p = (BiTree *)malloc(sizeof(BiTree));
  p -> data = c;
  p -> Lchild = null;
  p -> Rchild = null;
  if(k == 0)  t = p;
  if(k == 1)  s -> Lchild = p; /*链接到左子树*/
  if(k == 2)  s -> Rchild = p; /*链接到右子树*/
  createBiTree(p, 1);
  createBiTree(p, 2);
 }
 return t;
}

void PreOrder(BiTree *s)
{
 if(s)
 {
  Visit(s -> data);
  PreOrder(s -> Lchild);
  PreOrder(s -> Rchild);
 }
}

void MidOrder(BiTree *s)
{
 if(s)
 {
  MidOrder(s -> Lchild);
  Visit(s -> data);
  MidOrder(s -> Rchild);
 }
}

void PostOrder(BiTree *s)
{
 if(s)
 {
  PostOrder(s -> Lchild);
  PostOrder(s -> Rchild);
  Visit(s -> data);
 }
}

void Visit(char e)
{
 printf("%c", e);
}

posted @ 2013-10-30 16:56  第十届电视剧  阅读(125)  评论(0编辑  收藏  举报