c語言的二叉樹遍歷

定義;image.png
關鍵詞訪問和次序, 訪問決定你要作什麼,次序決定按那種方式做。
前序遍歷 (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
如圖;二叉樹 image.png
image.png
image.png
image.pngfna
image.png
5 再次遞歸調用preOrderTraverse(T->lchild)時 T=NULL, 此時遞歸退層,返回H 的地址,並訪問 H的 H->rchild = T->rchild;
image.png
image.png
當開始訪問E結點時 訪問它的左右孩子均爲空返回到B 時根的左孩子即訪問結束訪問 ,開始執行訪問根的右孩子 ;數據結構

中序遍歷算法;(LDR);函數

void InOrdeTraverse(BiTree T)
{
     if(T==NULL)   //遞歸出口;
     return ;
     InOrderTraverse (T->lchild)  //當T->lchild!=NULL 時就一直向下遞歸;
     printf("%c" ,T->data);   // 函數的遞歸退層時就輸出;
     InOrderTraverse(T->rchild);
}

如圖所示;
image.png;
image.png;
image.png;
image.png;
D無右孩子,向上返回打印B;
image.png
image.png
image.png
1
後序遍歷法 (LRD);spa

void PostOrderTraverse(BiTree T)
{
       if(T==NULL)
       return  ;
       PostOrderTraverse(T->lchild);
       PostOrderTraverse(T->rchild); //當左爲空時返回到次位置,
       printf("%c" ,T->data);  //
}

image.png;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;
相關文章
相關標籤/搜索