二叉樹前序 中序 後序 層序 概念

前序遍歷:就是從二叉樹的根結點出發,當第一次到達結點時就輸出結點數據,按照先向左在向右的方向訪問

ABDHIEJCFG 根節點在第一位

中序遍歷就是從二叉樹的根結點出發,當第二次到達結點時就輸出結點數據,按照先向左在向右的方向訪問

HDIBJEAFCG 根節點在中間 中序遍歷順序和大小順序是相同的

後序遍歷就是從二叉樹的根結點出發,當第三次到達結點時就輸出結點數據,按照先向左在向右的方向訪問

HIDJEBFGCA 根節點在最後一位

層次遍歷就是按照樹的層次自上而下的遍歷二叉樹

ABCDEFGHIJ 根節點在第一位

3.8.6 遍歷常考考點

對於二叉樹的遍歷有一類典型題型。
1)已知前序遍歷序列和中序遍歷序列,確定一棵二叉樹。
例題:若一棵二叉樹的前序遍歷爲ABCDEF,中序遍歷爲CBAEDF,請畫出這棵二叉樹。
分析:前序遍歷第一個輸出結點爲根結點,故A爲根結點。早中序遍歷中根結點處於左右子樹結點中間,故結點A的左子樹中結點有CB,右子樹中結點有EDF。
如圖3.14所示:

 

圖3.14

 

按照同樣的分析方法,對A的左右子樹進行劃分,最後得出二叉樹的形態如圖3.15所示:

 

圖3.15.png

2)已知後序遍歷序列和中序遍歷序列,確定一棵二叉樹。
後序遍歷中最後訪問的爲根結點,因此可以按照上述同樣的方法,找到根結點後分成兩棵子樹,進而繼續找到子樹的根結點,一步步確定二叉樹的形態。
:已知前序遍歷序列和後序遍歷序列,不可以唯一確定一棵二叉樹。中序確定左右節點

/*二叉樹的前序遍歷遞歸算法*/
void PreOrderTraverse(BiTree T)
{
    if(T==NULL)
    return;
    printf("%c", T->data);  /*顯示結點數據,可以更改爲其他對結點操作*/
    PreOrderTraverse(T->lchild);    /*再先序遍歷左子樹*/
    PreOrderTraverse(T->rchild);    /*最後先序遍歷右子樹*/
}


/*二叉樹的中序遍歷遞歸算法*/
void InOrderTraverse(BiTree T)
{
    if(T==NULL)
    return;
    InOrderTraverse(T->lchild); /*中序遍歷左子樹*/
    printf("%c", T->data);  /*顯示結點數據,可以更改爲其他對結點操作*/
    InOrderTraverse(T->rchild); /*最後中序遍歷右子樹*/
}


/*二叉樹的後序遍歷遞歸算法*/
void PostOrderTraverse(BiTree T)
{
    if(T==NULL)
    return;
    PostOrderTraverse(T->lchild);   /*先後序遍歷左子樹*/
    PostOrderTraverse(T->rchild);   /*再後續遍歷右子樹*/
    printf("%c", T->data);  /*顯示結點數據,可以更改爲其他對結點操作*/
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章