你|若|问|我 发表于 2013-4-25 16:58:47

二叉树的创建及先序遍历中序遍历后序遍历

bittree.h
#include <stdio.h>
#include <stdlib.h>
#define OK 1
typedef char TElemType;
typedef int Status;

typedef struct BiTNode{
      TElemType data;
      struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
Status CreatBitTree(BiTree &T)
{
      TElemType ch;
      scanf("%c",&ch);
      if (ch=='#')
                T=NULL;
      else {
                T=(BiTree)malloc(sizeof(BiTNode));
                T->data=ch;
                CreatBitTree(T->lchild);
                CreatBitTree(T->rchild);
      }
      return OK;
}

Status PreOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{
      if (T)
      {
                Visit(T->data);
                PreOrderTraverse(T->lchild,Visit);
                PreOrderTraverse(T->rchild,Visit);
      }
      return OK;
}

Status InOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{
      if (T)
      {      
                InOrderTraverse(T->lchild,Visit);
                Visit(T->data);
                InOrderTraverse(T->rchild,Visit);
      }
      return OK;
}

Status PostOrderTraverse(BiTree T,Status (* Visit)(TElemType e))
{
      if (T)
      {
                PostOrderTraverse(T->lchild,Visit);
                PostOrderTraverse(T->rchild,Visit);
                Visit(T->data);
      }
      return OK;
}
Status PrintElem(TElemType e)//输出函数,这样写的目的很简单,如果要输出其他类型只需要修改这个函数即可
{
      printf("%c",e);
      return OK;
}
bittree.cpp
#include<bittree.h>int main()
{
      BiTree tree;
      Status (* Visit)(TElemType e);
      Visit=PrintElem;
      CreatBitTree(tree);
      PreOrderTraverse(tree,Visit);//先序遍历
      printf("\n");
      InOrderTraverse(tree,Visit);//中序遍历
      printf("\n");
      PostOrderTraverse(tree,Visit);//后序遍历
      printf("\n");
      getchar();
      getchar();
      return 0;
}
测试数据:
/*
ABC##DE#G##F###
ABCDEGF
CBEGDFA
CGEFDBA
*/

二叉树的创建和遍历

自己写的,不太喜欢文字,对于看不懂的可以回复,我会第一时间回答你的问题!
这个很基础,对于需要学习二叉树的人来说,入门很好!

页: [1]
查看完整版本: 二叉树的创建及先序遍历中序遍历后序遍历