浙大資料結構與演算法慕課隨手記 第三講 樹(上)

2021-10-23 06:25:09 字數 2234 閱讀 9330

分層次組織管理效率更高

資料管理基本操作:查詢

靜態查詢:陣列

方法1:順序查詢(哨兵值)o(n)

方法2:二分查詢(有序+連續儲存,left right mid,一般是向下取整)o(logn)

*二分查詢的啟示:判定樹

1.每個結點的查詢次數=該結點所在層數

2.查詢次數≤判定樹的深度

3.n個結點判定樹的深度=[log2n]+1

4.asl平均成功查詢次數=總次數/總元素數

動態查詢:有插入刪除,查詢樹

樹的定義:n個結點構成的有限集合,遞迴

n=0空樹,n>0非空樹

根結點root+互不相交的子樹subtree

除root外,每個結點有且僅有乙個父結點

n個結點的樹有n-1條邊(最小連通方式)

樹的術語

結點的度degree(結點的子樹個數)、樹的度(所有結點最大的度數)

葉結點(度=0)、父結點、子結點、兄弟結點(同一父結點)

路徑和路徑長度(邊的個數)、祖先結點、子孫結點

結點層次level(根結點在1層,後續+1)、樹的深度/高度depth(最大層次)

樹的表示

兒子-兄弟表示法(結構統一的鍊錶)

旋轉45度得到二叉樹(度=2)left right(最重要的樹結構)

定義

二叉樹t:乙個有窮的結點集合;若不為空,由根結點、左子樹、右子樹組成

相當於度=2的樹,但有左右之分

五種基本形態;特殊形態:斜二叉樹(≈鍊錶)、完美/滿二叉樹、完全二叉樹(滿二叉樹的葉結點可以從右向左空缺,使編號連續)

性質

(1)第i層的最大結點數=2^(i-1)

(2)深度=k,最大結點總數=2^k-1

(3)對非空二叉樹,葉結點數n0=度為2非葉結點數n2+1(可用向下/上的邊數證明)

操作

判別是否空、建立、遍歷

儲存結構

1.先序、中序、後序(序=根的順序,遞迴遍歷左右子樹)

遍歷過程中經過結點的路線一樣,只是訪問各結點的時機不同

每個結點有三次訪問時機-先中後

2.中序非遞迴遍歷(堆疊實現)

結點壓棧-遍歷左子樹-彈出結點並訪問-遍歷右子樹

*先序、後序也可實現

3.層序遍歷(上下-左右)

二叉樹遍歷本質:二維結構線性化

訪問左兒子後,需要儲存結構儲存暫時不訪問的結點:堆疊(父結點)/ 佇列(右兒子)

*層序遍歷的佇列實現:根結點入隊→結點出隊、訪問該結點、左右兒子入隊(迴圈)

應用

例1:輸出葉結點

先序遍歷框架,增加判斷左右子樹是否均為空即可

例2:求二叉樹高度

後序遍歷框架,=左右子樹的最大高度+1(遞迴)

例3:二元運算表示式樹及其遍歷

運算數=葉結點,運算符號=非葉結點

先序-字首表示式

中序-中綴表示式(不準確,受運算符號優先順序影響,可通過加括號輸出解決)

後序-字尾表示式

例4:由兩種遍歷序列確定二叉樹

中序+先序/後序→確定唯一二叉樹,先+後不行(左右不明)

先序+中序:先序根結點→在中序中分解出左右子樹→對左右遞迴繼續分解

*先序=中序:無左子樹

數的同構:一棵樹可以通過若干次左右子樹互換變為另一棵(不可越層互換)

求解思路

1.二叉樹表示:鍊錶/陣列(當做完全二叉樹),結構陣列(物理)=靜態鍊錶(思想)

2.建二叉樹:未出現過的編號=根結點

3.同構判別:特例+分類討論+遞迴(邏輯要嚴密,不能遺漏情況)

浙大資料結構與演算法慕課隨手記 第二講 線性結構

例 一元多項式及其運算 方法1 順序儲存直接表示 陣列,浪費空間 方法2 順序儲存非零項 結構陣列,係數,指數 二元組,按指數大小有序儲存 方法3 鍊錶儲存非零項 定義兩個資料域 多項式表示問題啟示 1.同乙個問題有不同表示 儲存方法 陣列or鍊錶 2.共性問題 有序線性序列的組織與管理 線性表 同...

2020秋冬慕課浙大資料結構期中考試及答案

考試時間1小時 一 判斷題 1 1所謂 迴圈佇列 是指用單向迴圈鍊錶或者迴圈陣列表示的佇列。2分 tf 答案 f 1 2在具有n個結點的單鏈表中,訪問結點和增加結點的時間複雜度分別對應為o 1 和o n 3分 tf 答案 f 1 3如果無向圖g必須進行兩次廣度優先搜尋才能訪問其所有頂點,則g一定有2...

《資料結構與演算法》 浙大MOOC)第1章 概論

include include include clock t start,stop double duration define maxn 10 多項式最大項數,即多項式階數 1 define maxk 1e7 被測函式最大重複呼叫次數 doublef1 int n,double a,double...