链式二叉树又称二叉链表,遍历有三种,分别是前序(先序),中序,后序。
首先创建二叉树,没有建立,何谈遍历?
定义二叉树的存储结构为链式存储
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.访问右子树
总结三个字:中左右
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 }