定义;
关键词访问和次序, 访问决定你要作什么,次序决定按那种方式做。
前序遍历 (DLR)
//数据结构;算法
typedef struct { int data; BiTNode *rchild; BiTNode *lchild; }BiTNode ,*BiTree; void preOrderTraverse( BiTree T) { if(T==NULL) //递归出口; return ; printf("%c" ,T->data); //显示结点数目; preOrderTraverse(T->lchild) ; //先左子树; preOrderTraverse(T->rchild) ;// 再右子树; }
1
如图;二叉树 fna
5 再次递归调用preOrderTraverse(T->lchild)时 T=NULL, 此时递归退层,返回H 的地址,并访问 H的 H->rchild = T->rchild;
当开始访问E结点时 访问它的左右孩子均为空返回到B 时根的左孩子即访问结束访问 ,开始执行访问根的右孩子 ;数据结构
中序遍历算法;(LDR);函数
void InOrdeTraverse(BiTree T) { if(T==NULL) //递归出口; return ; InOrderTraverse (T->lchild) //当T->lchild!=NULL 时就一直向下递归; printf("%c" ,T->data); // 函数的递归退层时就输出; InOrderTraverse(T->rchild); }
如图所示;;
;
;
;
D无右孩子,向上返回打印B;
1
后序遍历法 (LRD);spa
void PostOrderTraverse(BiTree T) { if(T==NULL) return ; PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); //当左为空时返回到次位置, printf("%c" ,T->data); // }
;3d
1 A->B->D->H 由PostOrderTraverse(T->lchild) //一直向左访问.
2 H->lchild ==NULL ; return ;到 H 进行PostOrderTraverse(T->rchild);
3 再向下访问PostOrderTraverse(T->lchild)==NULL,return;
PostOrderTraverse(T->rchild)==NULL,return 到H;
输出k;
4 H的左右均为空输出 H ,返回到 D;
5 D位置的PostOrderTraverse(T->rchild)==NULL ,输出D,返回到 B ;
6 ,B位置的,PostOrderTraverse(T->rchild)!=NULL ,将 T指向T的左孩子位置 ,T->lchild==NULL return 返回E ,T->rchild==NULL 输出E ,返回到B ,输出B;code
顺序KHDEBIFJGCA;