1. 程式人生 > >樹(學習筆記)

樹(學習筆記)

定義: 1、有且只有一個稱為根的節點

           2、有若干個互不相交的子樹,這些子樹本身也是一棵樹


*************************************

許多名稱定義參照中國血緣關係理解

*************************************

節點的度:擁有子節點的個數

度為0的節點:節點的葉子或終端節點

度不為0的節點:終端節點或分支節點(分直節點又稱為內部節點)

樹的度是樹內各節點的度的最大值

如圖:D為A的孩子,A為D的雙親;同一個雙親的孩子稱為兄弟

深度(高度):樹中節點的最大層(根為第一層)

有序樹:樹中節點各子樹看成從左至右是有序的(反之為無序樹)

樹:m(m>=0)顆互不相交的樹的集合

一般樹的儲存

1.雙親表示法:求父節點方便

2.孩子表示法:求子節點方便

3.雙親孩子表示法:求父親和孩子都很方便

4.二叉樹表示法

        把一棵樹轉化為二叉樹儲存:設法保證任意一個子節點的左指標指向它的第一個孩子,右指標指向它第一個孩子的兄弟(只要滿足樹的條件就可以將樹轉化成二叉樹)

森鈴的儲存

先把森林轉化為二叉樹,再進行儲存


樹的遍歷

先序遍歷:(根左右)

                 先訪問根節點

                 再先序訪問左子樹

                 再先序訪問右子樹

ABCHDEFG

中序遍歷:(左根右)

                 先中序遍歷左子樹

                 再訪問根節點

                 中序遍歷右子樹

HCBDAFGE

後續遍歷:(左右根)

                 先後序遍歷左子樹

                 再後續遍歷右子樹

                 再訪問根節點

HCDBFGEA

已知兩種遍歷序列求原始二叉樹

只有已知先中/後中兩種遍歷序列才能求原始二叉樹

                已知先後兩種遍歷序列不行

1.已知先序和後序

1).先序首資料字母為二叉樹根節點

2).中序中根節點字母左邊為左子樹內容根節點右邊字母為根節點右子樹內容

例.

先序:ABCDEFGH

中序:BDCEAFHG


後序:DECBHGFA

2.已知中序和後序兩種序列

1).後序最後一個出現的字母為根節點

2).中序中根節點字母左邊為左子樹內容根節點右邊字母為根節點右子樹內容

例.

中序:BDCEAFHG

後序:DECBHGFA


先序:ABCDEFGH