前面講到中,順序表的插入和刪除效率還可以,但查詢效率很低;而有序線性表中,可以使用折半、插值、斐波那契等查詢方法來實現,因為要保持有序,其插入和刪除操作很耗費時間。二叉排序樹(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 通常二叉查詢樹基於鍊錶實現,每個節點儲存左,右子節點,如果想更方便的實...