二叉查詢樹是二叉樹的一種,但它要求乙個節點的左子節點小於該節點,右子節點大於該節點,因此二叉查詢樹里儲存的值必須是可比較的。
以下是一些暴露的public
方法,大多數都呼叫私有方法實現。
另外還有乙個隱藏的巢狀節點類。
public
class binarysearchtree>
private
binarynode(e e)
}//樹的根節點
private binarynoderoot;
public boolean contains(t t)
public t findmin()
public t findmax()
public
void
insert(t t)
public
void
remove(t t)
public
void
printtree()
public boolean isempty()
......
}
私有方法:findmin與findmax
查詢最大值與最小值,只需要找到深度最大的右子節點和左子節點即可即可
private binarynodefindmin(binarynodenode)
private binarynodefindmax(binarynodenode)
私有方法:insert
實現插入操作只需要與當前節點比較,小的往左繼續找,大的往右繼續找,遞迴找到最深處插入即可,重複值將不做操作。
private binarynodeinsert(t t,binarynodenode)
私有方法:remove
remove方法相對複雜,當移除的節點只有左子樹或只有右子樹時,可以直接用左子樹或右子樹代替移除的節點,但有兩顆子樹時,需要找到右子樹中的最深的左子節點(即右子樹中的最小值)代替當前值。
private binarynoderemove(t t,binarynodenode)else
return node;
}
私有方法:printtree
這個方法靠喜好實現吧,二叉樹怎麼列印出來都感覺很亂
private
void
printtree(binarynodenode)
if(node.right!=null)
//當前節點及子節點列印完換行
system.out.println();
//分別將左右子節點當做當前節點列印其子節點
printtree(node.left);
printtree(node.right);
}
私有方法:contains
採用遍歷樹的方式找到樹的最深處,有相同值返回true
private
boolean
contains(t t,binarynodenode)
return
false;
}
以上就是二叉查詢樹的基本實現,主要採用遞迴實現,也可替換成迴圈。 JAVA資料結構 二叉查詢樹
二叉查詢樹 英語 binary search tree 也稱二叉搜尋樹 有序二叉樹 英語 ordered binary tree 排序二叉樹 英語 sorted binary tree 是指一棵空樹或者具有下列性質的二叉樹 若任意節點的左子樹不空,則左子樹上所有節點的值均小於它的根節點的值 若任意節...
資料結構 二叉樹 二 二叉樹的性質
滿二叉樹是每層的節點個數都達到了最多的二叉樹,如下圖所示 完全二叉樹是節點的編號順序與滿二叉樹一致,但最後一層的節點可能會在末尾連續得少一些,如下圖所示 從上往下數,第i層上最多有2 i 1 個節點。深度為k得二叉樹至多有2 k 1個節點 對任意一顆二叉樹,其終端節點 葉子節點 數為n0,度為2的節...
資料結構 樹(三) 二叉查詢樹
二叉查詢樹的性質 例子二叉查詢樹 bst 是一種特殊的二叉樹,又稱為排序二叉樹 二叉搜尋樹 二叉排序樹。二叉查詢樹實際是一棵資料域有序的二叉樹。二叉查詢樹的遞迴定義如下 要麼二叉查詢樹是一棵空樹。要麼二叉查詢樹由根結點 左子樹 右子樹組成,其中左子樹和右子樹都是二叉查詢樹,且左子樹上所有結點的資料域...