樹的預備知識,基本術語,順序查詢(哨兵)和二分查詢

2021-10-19 07:27:09 字數 2328 閱讀 2795

客觀世界中許多食物存在層次關係:人類社會家譜、社會組織結構、檔案路徑

分層次組織在管理上具有更高的效率

查詢:靜態查詢:集合中的記錄是固定不變的

哨兵,第乙個字元放長度,在第零號位置存放我們要查詢的字元,從後往前查詢

動態查詢:集合中的記錄是動態變化的

靜態查詢

方法一:順序查詢:(哨兵)

1 typedef struct lnode *list;

2 strut lnode ;

1 //查詢的函式實現

2 int sequentialsearch(list tb1, elementtype k)

3

方法二、二分查詢(binary search)

假設n個資料元素的關鍵字滿足有序且是連續存放(在陣列中),那麼可以進行二分查詢

在鍊錶中則不能二分查詢,無序也不能二分查詢

left mid right

當right > left 時,查詢失敗

二分查詢判定樹:判定樹上每個結點需要的查詢次數剛好為該結點所在的層數

查詢成功時不會超過判定樹的深度

n個結點的判定樹的深度為[log2n]+1

數的定義: n(n>=0)個結點構成的有限集合

n = 0 時為空樹

根r(root)

字樹:字樹之間是不想交的,

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

一棵n個結點的數有n-1條邊

數是保證結點連通的邊最少的一種連線方式

樹的一些基本概念:

結點的度:(degree)結點的字樹個數

樹的度:

葉節點 (leaf ):度為0的結點,沒有字樹的結點

父結點:(parent)有字樹的結點是其字樹的根節點的父節點

子節點:(child):

兄弟結點( (sibling ):具有同一父節點的各結點彼此是兄弟結點

路徑和路徑長度:從結點n 1 到 到n k 的 路徑 為乙個結點序列n 1 , n 2 ,… , n k , n i 是 是 n i+1 的父結

點。路徑上邊的條數就是路徑長度

祖先結點(ancestor) :沿樹根到某一節點路徑上的所有結點都是這個結點的祖先結點

子孫結點(descendant) :某一節點的子樹中所有結點是這個結點的子孫

結點的層次 (level ):規定根結點在1層,其他任意結點的層數是其父節點的層數加一

樹的深度( (depth):樹中所有結點中的最大層次是這棵樹的深度

任意結點的深度:從根結點到該結點的唯一路徑的長度(所以根節點的深度為0)

結點的高:從該結點到一片樹葉的最長路徑的長(所以樹葉的高為0)

後裔:真後裔:

asl = (4*4 + 4*3 + 2*2 +1) = 3 //平均成功查詢次數

二分查詢**:

1 int binarysearch(statalbe *tbl, elementtype k)

2 13 return notfound; //查詢不成功,返回-1;

14 }

數的定義: n(n>=0)個結點構成的有限集合

n = 0 時為空樹

根r(root)

字樹:字樹之間是不想交的,

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

一棵n個結點的數有n-1條邊

數是保證結點連通的邊最少的一種連線方式

樹的一些基本概念:

結點的度:(degree)結點的字樹個數

樹的度:

葉節點 (leaf ):度為0的結點,沒有字樹的結點

父結點:(parent)有字樹的結點是其字樹的根節點的父節點

子節點:(child):

兄弟結點( (sibling ):具有同一父節點的各結點彼此是兄弟結點

路徑和路徑長度:從結點n 1 到 到n k 的 路徑 為乙個結點序列n 1 , n 2 ,… , n k , n i 是 是 n i+1 的父結點。路徑上邊的條數就是路徑長度

祖先結點(ancestor) :沿樹根到某一節點路徑上的所有結點都是這個結點的祖先結點

子孫結點(descendant) :某一節點的子樹中所有結點是這個結點的子孫

結點的層次 (level ):規定根結點在1層,其他任意結點的層數是其父節點的層數加一

樹的深度( (depth):樹中所有結點中的最大層次是這棵樹的深度

任意結點的深度:從根結點到該結點的唯一路徑的長度(所以根節點的深度為0)

結點的高:從該結點到一片樹葉的最長路徑的長(所以樹葉的高為0)

後裔:真後裔:

樹的預備知識

0.1 本文總結於 資料結構與演算法分析,旨在整理出 樹的相關術語和概念 哥子始終記不住樹的高度和深度,記著記著就混淆了,哎,所以分享出來 1.1 定義樹的一種自然方式是遞迴的方法 1.2 樹定義 一棵樹是一些節點的集合,這個集合可以是空集 若非空,則一棵樹由稱作 根 root 的節點r 以及0個或...

利用低端哨實現順序表的查詢

順序查詢 sequential search 又叫線性查詢,是最基本的查詢技術。順序表查詢演算法優化,在查詢方向的盡頭放置 哨兵 免去了在查詢過程中每一次比較後都要 判斷查詢位置是否越界,當然也可以在末端放置 哨兵 includeusing namespace std 順序查詢,a為陣列,n為要查詢...

順序查詢(利用監視哨)的實現

include include includeusing namespace std typedef int keytype typedef int infotype define max 100 typedef struct elemtype typedef structsstable int s...