二叉树的前序,中序,后序遍历

来源:互联网 发布:dota2剑圣新套装淘宝 编辑:程序博客网 时间:2024/05/21 22:24

对于二叉树T,可以递归定义它的前序遍历,中序遍历,后序遍历,只要深搜理解了,三种遍历都不是事
前序:PreOrder(T)=T的根节点+PreOrder(T的左子树)+PreOrder(T的右子树);
中序:PreOrder(T)=PreOrder(T的左子树)+T的根节点+PreOrder(T的右子树);
后序:PreOrder(T)=PreOrder(T的左子树)+PreOrder(T的右子树)+T的根节点;
放上代码感受一下,咳咳,为了检验大家深搜到底有没有 理解,我并不给输入说明,大家看CreateBiTree()函数自己创建一棵二叉树,我还是那句话,只要深搜理解透彻,你不用三分钟就可以搞定三种遍历
1 2 0 0 3 0 0(输入)
1 2 3
2 1 3
2 3 1

呃呃,还是给大家一组输入吧

#include <stdio.h>//节点声明,数据域、左指针、右指针typedef struct BiTNode{   int data;   struct BiTNode *Left,*Right;}BiTNode,*BiTree;BiTree CreateBiTree();void PreOrderTraverse(BiTree T);void InOrderTraverse(BiTree T);void PostOrderTraverse(BiTree T);int main(){   BiTree T;   T = CreateBiTree();//建立   PreOrderTraverse(T);//   printf("\n");   InOrderTraverse(T);   printf("\n");   PostOrderTraverse(T);   printf("\n");   return 0;}//先序建立二叉树BiTree CreateBiTree(){   int a;   BiTree T;   scanf("%d",&a);   if(a==0)       T=NULL;   else   {       T = (BiTree)malloc(sizeof(BiTNode));       T->data = a;       T->Left = CreateBiTree();       T->Right = CreateBiTree();   }   return T;//返回根节点}//先序遍历二叉树void PreOrderTraverse(BiTree T){   if(T)   {      printf("%d ",T->data);      PreOrderTraverse(T->Left);      PreOrderTraverse(T->Right);   }   return;}//中序遍历void InOrderTraverse(BiTree T){   if(T)   {      PreOrderTraverse(T->Left);      printf("%d ",T->data);      PreOrderTraverse(T->Right);   }}//后序遍历void PostOrderTraverse(BiTree T){   if(T)   {      PreOrderTraverse(T->Left);      PreOrderTraverse(T->Right);      printf("%d ",T->data);   }}
0 0
原创粉丝点击