資料結構複習七之 查詢之 二叉搜尋樹

2021-10-06 05:54:20 字數 1950 閱讀 3748

前面講到中,順序表的插入和刪除效率還可以,但查詢效率很低;而有序線性表中,可以使用折半、插值、斐波那契等查詢方法來實現,因為要保持有序,其插入和刪除操作很耗費時間。二叉排序樹(binary sort tree),又稱為二叉搜尋樹,則可以在高效率的查詢下,同時保持插入和刪除操作也又較高的效率。

二叉查詢樹具有以下性質:

(1)若任意節點的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值;

(2)任意節點的右子樹不空,則右子樹.上所有結點的值均大於它的根結點的值;

(3)任意節點的左、右子樹也分別為二叉查詢樹。

package 查詢;

class

node

}public

class 二叉搜尋樹

//查詢最小結點 返回以root為根的二叉樹的最小結點

public node find_min

(node root)

while

(root.lchild!=null)

return root;

}//查詢最大結點 返回以root為根的二叉樹的最大結點

public node find_max

(node root)

while

(root.rchild!=null)

return root;

}//查詢

public

boolean

searchbst

(node root,

int key)

while

(root!=null)

else

if(root.data>key)

else

}return

false;}

//插入

public node insertbst

(node root,

int key)

if(key == root.data)

else

if(key < root.data)

else

return root;

}//刪除

public

boolean

deletebst

(node root,

int key)

node parent=null;

//用來儲存父節點

node pnext=root;

//用來移動 儲存孩子結點

while

(pnext!=null)

else

if(pnext.data>key)

else

}return

false;}

public

void

delete

(node pnext,node parent)

else

else}}

else

if(pnext.rchild==null)

else

else}}

else

pnext.data=pre.data;

if(node!=pnext)

else

node=null;}}

//遍歷

public

void

inorder

(node node)

inorder

(node.lchild)

; system.out.

print

(node.data+

" ")

;inorder

(node.rchild);}

public

static

void

main

(string[

] args)

}

複習資料結構之二叉查詢樹

include include include include typedef int datatype typedef struct node bstptr struct node bstptr parent1 bstptr parent2 void addnodetobst bstptr roo...

資料結構之二叉搜尋樹

什麼是二叉搜尋樹呢?它與別的資料結構相比其優勢又是什麼呢?一顆二叉搜尋樹就是以一顆二叉樹來組織和儲存資料的,如圖所示 圖a是包含6個節點 高度為2的二叉樹,圖b是包含相同關鍵字 高度為4的低效二叉樹 對比博文前面所介紹的鍊錶,二叉樹也是可以用結構體來實現,只不過每個節點裡面不僅要儲存資料本身的關鍵字...

資料結構之二叉查詢樹

針對二叉查詢樹的操作 增刪改查 的時間和樹的高度成正比,比如都有10個節點的乙個樹,樹高為4和樹高為10的操作時間肯定是不同的,這個時間實際上是o lgn 二叉查詢樹的期望的樹高是lgn,從而基本動態集合的操作平均時間為 lgn 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...