树--递归实现先、中、后序遍历

2014-11-24 07:48:26 · 作者: · 浏览: 0
#include 
  
   
#include 
   
     #define TElemType char #define ERROR 0 #define OK 1 /*********二叉树的链表存储表示**********/ typedef struct BiTNode { TElemType data; struct BiTNode *lchild,*rchild; //左右孩子指针 }BiTNode,*BiTree; /**********创建树***********/ int CreatTree(BiTree &T) { TElemType ch; ch = getchar(); if(ch == ',') //如果输入的字符为',',则此结点为叶子结点 { T = NULL; }else { T = (BiTree)malloc(sizeof(BiTNode)); //建立结点 if(! T) //创建结点失败 return ERROR; T->data = ch; //输入结点的数值 CreatTree(T->lchild); CreatTree(T->rchild); } return OK; } /*********先序遍历***********/ void PreOrderTraverse(BiTree &T) { if(T) { printf("%c ",T->data); //输出根结点 PreOrderTraverse(T->lchild); // 输出左子树 PreOrderTraverse(T->rchild); //输出右子树 } } /*********中序遍历***********/ void InOrderTraverse(BiTree &T) { if(T) { PreOrderTraverse(T->
lchild); //输出左子树 printf("%c ",T->data); //输出根结点 PreOrderTraverse(T->rchild); //输出右子树 } } /**********后序遍历***********/ void PostOrderTraverse(BiTree &T) { if(T) { PreOrderTraverse(T->lchild); //输出左子树 PreOrderTraverse(T->rchild); //输出右子树 printf("%c ",T->data); //输出根结点 } } int main() { BiTree tree; /********创建树功能*********/ if(CreatTree(tree)) { /*******先序遍历结果*********/ printf("先序遍历树结果:"); PreOrderTraverse(tree); printf("\n\n"); /*******中序遍历结果*********/ printf("先序遍历树结果:"); InOrderTraverse(tree); printf("\n\n"); /********后序遍历结果********/ printf("先序遍历树结果:"); PostOrderTraverse(tree); printf("\n\n"); }else { printf("创建树失败!\n"); } return 0; }