二叉樹圖
圖g又定點集v和邊集e組成,記g=(v,e)。
頂點集表示:v= ,|v|為頂點的個數,或圖g的階。
邊集表示:e=, |e|為邊的個數。
圖不可以為空——圖不可以沒有頂點,但是可以沒有邊
有向圖 e1= 點1指向點2,點2指向點3
無向圖e2=點之間僅有連線,沒有指向
簡單圖:
多重圖:兩點之間的邊數大於1
完全圖:兩個頂點之間都存在邊
子圖連通:無向圖中,兩點有路徑存在。
連通圖:任意兩點之間連通。
連通分量:無向圖中的極大連通子圖,稱為連通分量。(如果乙個圖有n個頂點,並且小於n-1條邊,則必定非連通!)
生成樹:包含全部頂點的極小連通子圖。
強連通:有向圖中,兩點之間互相有路徑,則兩點強連通。
強連通圖:任意兩點強連通。
頂點的度:該頂點為乙個端點的邊的數目(無向圖中,頂點v的度是依附於該頂點的邊的條數)
邊上可以帶權,帶權的圖也稱為網
邊數很少的圖——稀疏圖(|e|<|v|*log|v|),反之是稠密圖
路徑是兩點之間的路徑,路徑長度是路徑中的邊數,第乙個頂點和最後乙個頂點相同的路徑稱為迴路或者環
圖的儲存以及基本操作
1、鄰接矩陣法(無向圖、有向圖、網都可以的;適合稠密圖;容易確定任意兩點是否有邊,但確定圖中的邊數需要遍歷全體,代價高;空間複雜度是o(n^2))
2、鄰接表法(適合稀疏圖;對於給頂點,容易找出其對應鄰邊,但確定兩個點之間是否存在邊,需要再查詢另一點「鄰接矩陣法則不用」;)
3、十字鍊錶法(有向圖的)不僅可以像鄰接表一樣,還可以像逆鄰接表一樣
4、鄰接多重表(無向圖的)
圖的遍歷
(借助佇列)1、廣度優先遍歷(breadth-first-search)bfs
使用鄰接表儲存時,乙個頂點空間複雜度o(|v|),時間複雜度o(|e|),總的時間複雜度o(|v|+|e|);若採用鄰接矩陣的儲存方式,乙個頂點時間複雜度o(|v|),總的o(|v|2)
(借助棧)2、深度優先遍歷(deepth-first-search)dfs
圖的應用
一、求最小生成樹:包含所有頂點,但是有最少的邊
法一:prim演算法(名字短,所以演算法也從區域性開始)
1、找最小權值的兩點連通作為起始點
2、兩點連通後所擁有的最小權值作為下一對連通點
。。。。。。
ps:不能生成環
法二、kruskal演算法(名字長,演算法也從全域性開始)
1、全域性最短,進行連通
2、第二短。。。。。。
ps:同樣不能生成環
二、求最短路徑:求某個原點到各個頂點的最小路徑
法二:floyd(路由器定址)都走一遍,記錄所有最優路徑
三、拓撲排序
【有向無環圖】乙個有向圖中不存在環
【aov網】如用有向無環圖表示乙個工程,用表示vi與vj之間存在的前驅後繼關係,將這種有向圖稱之為《頂點表示活動的網路》aoe網。
【拓撲排序】1、每個定點出現且出現一次;2、若頂點a排序排在b的前面,則圖中不存在b->a;
(可借助棧了避免重複比較)【拓撲排序演算法】1、選擇乙個沒有前驅的點輸出;2、刪除該點及以它為起點的邊;3、重複12,若當前圖為空或者不存在無前驅的點就停止,而後一種情況說明有環。
四、關鍵路徑
【aoe網】帶權有向圖中,頂點表示時間,有向邊表示活動,邊上的權值表示活動的開銷,則成這種有向圖為用邊表示活動的網路,aoe網。
有些活動可以並行的,從源點到匯點的路可能有多條,並且可能長度還不一樣。儘管時間不同,但是只有完成了所有,整個工程才算是完成了。
「所以」從源點到匯點的所有路徑中,最大路徑長度的路程稱為【關鍵路徑】,關鍵路徑上的活動稱之為【關鍵活動】。
資料結構筆記 樹 二叉樹 滿二叉樹
二叉樹滿二叉樹 樹是n n 0 個結點的有限集。結點為零的樹為空樹。任意一棵非空樹中 1.有且有乙個特定的稱為根的結點 2.當n 1時,其餘結點可分為m m 0 個互不相交的有限集,其中每乙個集合又是一棵樹,並稱為根的子樹。1.結點擁有的子樹數稱為結點的度 2.度為0的結點稱為葉結點或分支結點,除根...
資料結構 樹和二叉樹
第一節 二叉樹的定義與基本操作 定義 我們把滿足以下兩個條件的樹型結構叫做二叉樹 binary tree 1 每個結點的度都不大於2 2 每個結點的孩子結點次序不能任意顛倒。由定義得出 二叉樹的每個結點只能含有0 1或2個孩子,且有左右之分。1 二叉樹的五種基本形態 2 二叉樹性質 性質1 二叉樹第...
資料結構 樹和二叉樹
定義 二叉樹是n n 0 個節點的有限集合,該集合或者為空集 稱為空二叉樹 或者由乙個根節點和兩棵互不相交的 分別稱為根節點的左子樹和右子樹的二叉樹組成。特點 每個節點最多有兩棵子樹 二叉樹是有序的,其次序不能任意顛倒 斜樹 1.所有節點都只有左子樹的二叉樹稱為左斜樹 2.所有節點都只有右子樹的二叉...