資料結構 二叉搜尋樹 BST

2021-10-09 10:17:31 字數 3288 閱讀 6493

一棵二叉搜尋樹具有如下特徵:

①節點的左子樹只包含小於當前節點的數

② 節點的右子樹只包含大於當前節點的數

③所有左子樹和右子樹自身必須也是二叉搜尋樹

若輸出二叉搜尋樹的中序遍歷序列,則這個序列是非遞減(非遞增)有序的

圖1:節點有:a,b,c,d,e,f,g 葉子結點: d,e,f,g 其中結點a又被稱為根節點。

結點a,b,c分別都有兩個子節點,所以他們的度為2,葉子結點d,e,f,g的度為0。

圖2:只是比圖1多了乙個結點t,他同樣也是葉子結點,因為a多了乙個子節點,所以a結點的度為3,它就不能被稱為二叉樹。

如圖1二叉樹結構,雙分支結點的數量為3,葉子結點有4個,符合性質1。但是圖2不符合該性質。因為它不是二叉樹

圖1中defg處於第三層,23-1=4個結點,記住這是最多這麼多個結點。

圖1二叉樹的高度為3,最多有7個結點。因為圖1的二叉樹有7個結點,那麼類似這種二叉樹就叫做滿二叉樹。

二分搜尋:從根節點到某一葉子節點的路徑搜尋過程。其時間複雜度為o(log2n)

/**

* 節點型別

*/static

class

entry

comparable

>

public

entry

(t data, entry

left, entry

right)

}

以下操作以遞迴方式實現:

/**

* 插入

* @param val

*/public

void

insert

(t val)

private entry

insert

(entry

root, t val)

if(root.data.

compareto

(val)

>0)

else

if(root.data.

compareto

(val)

<0)

return root;

}

/**

* 刪除

* @param val

*/public

void

remove

(t val)

/** * 遞迴刪除的內部操作

** @param root 當前節點

* @param val 需要刪除的節點值

* @return

*/private entry

remove

(entry

root, t val)

if(root.data.

compareto

(val)

>0)

else

if(root.data.

compareto

(val)

<0)

else

//用前驅節點的值覆蓋待刪除節點的值

root.data = pre.data;

//繼續遞迴尋找待刪除節點的前驅節點

root.left =

remove

(root.left, pre.data);}

else

else

if(root.right != null)

else}}

return root;

}

/**

* 查詢

* @param val

* @return

*/public

boolean

query

(t val)

private

boolean

query

(entry

root, t val)

if(root.data.

compareto

(val)

>0)

else

if(root.data.

compareto

(val)

<0)

else

}

/**

* 以root指向的節點為起始節點進行前序遍歷訪問 vlr

* @param root

*/private

void

preorder

(entry

root)

}/**

* 以root指向的節點為起始節點進行中序遍歷訪問 lvr

* @param root

*/private

void

inorder

(entry

root)

inorder

(root.left)

;//l

system.out.

print

(root.data +

" ")

;//v

inorder

(root.right)

;//r

}/**

* 以root指向的節點為起始節點進行後序遍歷訪問 lrv

* @param root

*/private

void

postorder

(entry

root)

postorder

(root.left)

;//l

postorder

(root.right)

;//r

system.out.

print

(root.data +

" ")

;//v

}/**

* 遞迴實現層序遍歷

* 乙個levelorder做的是深度遍歷,一層一層列印說的是廣度遍歷,有幾層遍歷幾次

*/public

void

levelorder()

system.out.

println()

;}

資料結構 2 二叉搜尋樹(BST)

二叉搜尋樹 乙個節點的左子節點的關鍵字的值小於這個節點,右子節點的關鍵字的值大於或者等於這個父節點 在查詢過程中,用變數current來儲存正在檢視的節點,引數key是要查詢的值,查詢從root開始,因此開始把current設為根。之後,在while迴圈中,將要查詢的值,key與idata做比較。小...

資料結構 3二叉搜尋樹 BST

結構體node 左結點left 右結點right 資料data 類bst 根結點root 主要功能有 新增 刪除 查詢 遍歷 前序遍歷 中序遍歷 後序遍歷 層序遍歷 深度優先搜尋 廣度優先搜尋 高度計算 時間複雜度 1 新增 時間複雜度為o logn 2 刪除 時間複雜度為o logn 簡單描述一下...

資料結構之 二叉搜尋樹 二叉排序樹 BST樹

二叉搜尋樹簡稱bst樹 二叉搜素樹是二叉樹的一種,陣列這種資料結構也能夠實現對元素的快速查詢,但是對於元素的新增 刪除和更新操作,使用陣列來實現的話,就會存在較高的時間複雜度 o n 級別。對於新增 刪除 查詢操作若是要保持較低的時間複雜度可以採用二叉搜尋樹來實現。二叉搜尋樹又稱二叉排序樹,其節點之...