二叉树的先序遍历,中序遍历,后续遍历的实现

先序遍历:

前序遍历(DLR),是二叉树遍历的一种,也叫做先根遍历、先序遍历。前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。

 二叉树的先序遍历,中序遍历,后续遍历的实现

遍历顺序:   A->B->D->E->C->F

 

中序遍历:

中序遍历(LDR)是二叉树遍历的一种,也叫做中根遍历、中序周游。在二叉树中,先左后根再右。

 

遍历顺序:   D->E->B->F->C->A(上图)

 

后序遍历:

后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,可记做左右根。后序遍历有递归算法和非递归算法两种。在二叉树中,先左后右再根。

遍历顺序:   D->B->E->A->F->C(上图)

 

 

二叉树的先序遍历,中序遍历,后续遍历的实现:

#include <stdio.h>

#include <stdlib.h> 

int i=-1;

typedef struct nodes            //结构体的构建

{

       intdata;                      

       structnodes *z, *y;      //左右指针,


}node;

 

node* tree(int * root)          //利用node结构体和数组构建树

{

       node*p;

       if(root[++i]== 0)p=NULL;  //如果是0代表空节点

       else{

              p       = (node*)malloc(sizeof(node));//从堆取申请

              p->data= root[i];

              p->z    = tree(root);        //递归调用

              p->y    = tree(root);          //递归调用

       }    

       returnp;

}

void xian(node *root)                        //先序遍历

{

       if(root!= 0){

       printf("%d",root->data);

       xian(root->z);

       xian(root->y);      

       }

}

void zhong(node *root)                            //中序遍历

{

       if(root!= 0){

       zhong(root->z);

       printf("%d",root->data);

       zhong(root->y);   

       }

}

void hou(node *root)                        //后序遍历

{

       if(root!= 0){

       hou(root->z);

       hou(root->y);

       printf("%d",root->data);

       }

}

 

void main(void)

{

       inta[]={3,3,4,0,0,5,4,0,0,0,5,5,7,0,0,3,0,0,3,5,3,0,0,2,0,0,7,0,0}; //先序排列的数组

 

       int*b=a;

       node*root=tree(b);    //构建该树

       xian(root);                          //先序遍历

       printf("\n");

       zhong(root);                //中序遍历

       printf("\n");

       hou(root);                           //后序遍历

       printf("\n");

}