定义;
关键词访问和次序, 访问决定你要做什么,次序决定按那种方式作。
前序遍历 (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);
void PostOrderTraverse(BiTree T)
{
if(T==NULL)
return ;
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild); //当左为空时返回到次位置,
printf("%c" ,T->data); //
}
;
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;
顺序KHDEBIFJGCA;
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。