樹結構是二叉樹的擴充套件,二叉樹在乙個節點上只有兩個子節點,而樹結構在乙個節點上不只有兩個,可以有n個,n大於等於0,更具有一般意義。
二叉樹的概念同樣適用於樹,如完全數,滿樹等,此外還有
有序樹:結點的各子樹從左到右是有次序的,即若交換各子樹相對位置會構成不同的樹。
無序樹:結點的各子樹從左到右是無次序的,即若交換各子樹相對位置部會構成不同的樹。
森林:零棵或有限棵不相交的樹的集合稱為森林。任何一棵樹,刪去根節點,就變成了森林。
表示方法:
1.直觀表示法
2.巢狀集合表示法
3.凹入表示法
4.廣義表表示法
樹結構:
1.雙親表示法:適用於子節點操作不多的場景,對獲取子節點資訊不利
本身資訊
雙親在陣列中的座標索引資訊
2.孩子表示法:適用于父節點操作不多的場景,對獲取父節點資訊不利
2.1多重鍊錶法:
本身資訊
子節點索引列表
2.2孩子鍊錶表示法:
本身資訊
子節點物件列表
子節點物件:
該子節點序號
下一孩子節點序號
3.雙親孩子表示法
本身資訊
父節點索引序號
子節點物件列表
子節點物件包含當前子節點索引序號和下一子節點(兄弟節點)索引序號
4.孩子兄弟表示法
本身資訊
首個子節點索引序號
當前節點下一子節點(兄弟節點)索引序號
樹轉為二叉樹:
(1)樹中所有相鄰兄弟之間加一條連線。
(2)對樹中的每個結點,只保留它與第乙個孩子結點之間的連線,刪去它與其它孩子結點之間的連線。
(3)以樹的根結點為軸心,將整棵樹順時針轉動一定的角度,使之結構層次分明。
森林轉為二叉樹:
(1)將森林中的每棵樹轉換成相應的二叉樹。
(2)第一棵二叉樹不動,從第二棵二叉樹開始,依次把後一棵二叉樹的根結點作為前一棵二叉樹根結點的右孩子,當所有二叉樹連起來後,此時所得到的二叉樹就是由森林轉換得到的二叉樹。
二叉樹轉換為樹和森林:
(1)若某結點是其雙親的左孩子,則把該結點的右孩子、右孩子的右孩子……都與該結點的雙親結點用線連起來;
(2)刪去原二叉樹中所有的雙親結點與右孩子結點的連線;
(3)整理由(1)、(2)兩步所得到的樹或森林,使之結構層次分明。
樹的遍歷:
1.先根遍歷
(1)訪問根結點;
(2)按照從左到右的順序先根遍歷根結點的每一棵子樹。
2.後根遍歷
(1)按照從左到右的順序後根遍歷根結點的每一棵子樹。
(2)訪問根結點;
森林的遍歷:
1.前序遍歷:(參照二叉樹先序遍歷)
(1)訪問森林中第一棵樹的根結點;
(2)前序遍歷第一棵樹的根結點的子樹;
(3)前序遍歷去掉第一棵樹後的子森林。
2.中序遍歷:(參照二叉樹中序遍歷)
(1)中序遍歷第一棵樹的根結點的子樹;
(2)訪問森林中第一棵樹的根結點;
(3)中序遍歷去掉第一棵樹後的子森林。
樹的應用:
1.判定樹。將所有可能的結果作為葉子節點,並將所有的判定過程作為節點,組成一棵判定樹
2.表示集合。處理集合的交,並操作等。
3.查詢。快速定位
資料結構學習 樹
樹是n個結點的有限集合。n 0時稱為空樹,在任意一棵非空樹中 1 有且僅有乙個特定的稱為根的結點。2 當n 1時,其餘結點可以分為m個互不相交的有限集合,其中每乙個集合本身又是一棵樹。在此,我們主要來學習二叉樹的應用。結點擁有的子樹數稱為結點的度。度為0的結點稱為葉子結點或者終端結點。度不為0的結點...
資料結構學習
什麼是資料結構 對計算機記憶體中的資料的一種安排。資料結構有那些?優缺點?1.陣列 插入快 知道下標 查詢慢,刪除慢,大小固定 2.有序陣列 比無序的查詢塊,刪除和插入慢,大小固定 3.棧 吃多了吐 個人理解 4.佇列 吃多了拉 個人理解 5.鍊錶 插入快,刪除快,查詢慢 6.二叉樹 查詢 插入 刪...
資料結構學習
鍊錶 class listnode definit self,x self.val x 節點值 self.next none 後繼節點值 例項化節點 n1 listnode 4 節點head n2 listnode 5 n3 listnode 1 構建引用指向 n1.next n2 n2.next ...