链式二叉树又称二叉链表,遍历有三种,分别是前序(先序),中序,后序。

首先创建二叉树,没有建立,何谈遍历?

定义二叉树的存储结构为链式存储

1 typedef struct BiNode{
2     int data;
3     BiNode *lchild,*rchild;   //左孩子和右孩子
5 }BiNode;
6 typedef struct BiNode* BiTree;

我们往往在创建之前要先初始化一下

 1 /*初始化并建立二叉树*/
 2 int index=0;
 3 void CreateBiTree(BiTree* T,char data[]){
 4     *T =NULL;   //初始化为空
 5     char ch;
 6     if(index<strlen(data)){
 7         ch = data[index++];
 8     }else{
 9         return;
10     }
11     if(ch =='#')      //此节点为空
12         *T =NULL;
13     else{
14         *T = (BiTree)malloc(sizeof(BiNode));
15         if(!*T)
16             exit(0);
17         (*T)->data=ch;  //生成根节点
18         CreateBiTree(&(*T)->lchild,data);
19         CreateBiTree(&(*T)->rchild,data);        
20     }
21 }

先序

  先序: 1.访问根结点

    2.访问左子树

    3.访问右子树

总结三个字:中左右

 链式二叉树的三种遍历方法(C递归)

1 /*先序遍历*/
2 void PreOrderTraverse(BiTree T){
3     if(T ==NULL)
4         return;
5     printf("%c ",T->data);
6     PreOrderTraverse(T->lchild);
7     PreOrderTraverse(T->rchild);
8 }
View Code

相关文章: