Java資料結構(二)二叉查詢樹

2021-08-21 05:51:07 字數 1743 閱讀 2898

二叉查詢樹是二叉樹的一種,但它要求乙個節點的左子節點小於該節點,右子節點大於該節點,因此二叉查詢樹里儲存的值必須是可比較的。

以下是一些暴露的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 是一種特殊的二叉樹,又稱為排序二叉樹 二叉搜尋樹 二叉排序樹。二叉查詢樹實際是一棵資料域有序的二叉樹。二叉查詢樹的遞迴定義如下 要麼二叉查詢樹是一棵空樹。要麼二叉查詢樹由根結點 左子樹 右子樹組成,其中左子樹和右子樹都是二叉查詢樹,且左子樹上所有結點的資料域...