卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

二叉搜索樹的實現(xiàn)及測試

在 Java 數(shù)據(jù)結(jié)構(gòu)教程中,二叉搜索樹(Binary Search Tree)是一個非常重要的數(shù)據(jù)結(jié)構(gòu)。本文將介紹如何使用 Java 實現(xiàn)二叉搜索樹,并提供代碼和測試用例。 創(chuàng)建樹的節(jié)點類在 Jav

在 Java 數(shù)據(jù)結(jié)構(gòu)教程中,二叉搜索樹(Binary Search Tree)是一個非常重要的數(shù)據(jù)結(jié)構(gòu)。本文將介紹如何使用 Java 實現(xiàn)二叉搜索樹,并提供代碼和測試用例。

創(chuàng)建樹的節(jié)點類

在 Java 中,我們可以通過創(chuàng)建一個 TreeNode 類來定義樹的節(jié)點。每個節(jié)點都有一個數(shù)據(jù)域、一個左子節(jié)點和一個右子節(jié)點。以下是 TreeNode 類的代碼:

```java

public class TreeNode> {

T data;

TreeNode left;

TreeNode right;

public TreeNode(T data) {

data;

left right null;

}

}

```

創(chuàng)建二叉搜索樹的類

接下來,我們需要創(chuàng)建一個 BinarySearchTree 類來定義二叉搜索樹。在這個類中,我們使用了泛型來支持不同類型的數(shù)據(jù)。使用泛型的好處是可以進(jìn)行比較。

以下是 BinarySearchTree 類的代碼:

```java

public class BinarySearchTree> {

TreeNode root;

public BinarySearchTree() {

null;

}

/

* 插入一個元素值;

* @param data

*/

public void insert(T data){

root insert(data, root);

}

protected TreeNode insert(T data, TreeNode node){

if(node null)

node new TreeNode(data);

else if(() < 0){

node.left insert(data,node.left);

}else{

node.right insert(data,node.right);

}

return node;

}

public void createTree(T[] datas){

for(int i0; i

insert(datas[i]);

}

}

/

* 遍歷;遞歸遍歷,先序;

*/

public void preOrder(){

preOrder(root);

}

protected void preOrder(TreeNode node){

if(node null)

return;

( " ");

preOrder(node.left);

preOrder(node.right);

}

/

* findMin 遞歸解法

*/

public T findMin(){

TreeNode node findMin(root);

return ;

}

protected TreeNode findMin(TreeNode node){

if(node.leftnull)

return node;

return findMin(node.left);

}

/

* findMax 遞歸解,非遞歸解

*/

public T findMax(){

TreeNode node findMax(root);

return ;

}

protected TreeNode findMax(TreeNode node){

if(node.rightnull)

return node;

return findMax(node.right);

}

/

* removeMin

*/

protected TreeNode removeMin(TreeNode node){

if(nodenull)

throw new RuntimeException("空樹");

else if(node.left!null){

node.left removeMin(node.left);

return node;

}else{

return node.right;

}

}

protected TreeNode remove(T data, TreeNode node){

if(() < 0){

node.left remove(data, node.left);

}else if(() > 0){

node.right remove(data, node.right);

}else if(node.left!null node.right!null){

//有兩個孩子,刪除此節(jié)點比較麻煩

findMin(node).data;

node.right removeMin(node.right);

}else{

node (node.left!null)?node.left:node.right;

}

return node;

}

}

```

編寫測試用例

最后,我們需要編寫測試用例來驗證二叉搜索樹是否正常工作。以下是測試用例的代碼:

```java

import org.junit.Test;

public class BinarySearchTreeTest {

@Test

public void testInsert() {

BinarySearchTree binarySearchTree new BinarySearchTree();

Integer[] datas {2,8,7,4,9,9,3,1,6,7,5};

(datas);

();

}

@Test

public void testFindMin() {

BinarySearchTree binarySearchTree new BinarySearchTree();

Integer[] datas {2,8,7,4,9,3,1,6,7,5};

(datas);

("最小值 " ());

}

@Test

public void testFindMax() {

BinarySearchTree binarySearchTree new BinarySearchTree();

Integer[] datas {2,8,7,4,9,9,3,1,6,7,5};

(datas);

("最大值 " ());

}

}

```

以上就是關(guān)于 Java 數(shù)據(jù)結(jié)構(gòu)教程之二叉搜索樹的實現(xiàn)及測試的內(nèi)容。希望能夠?qū)δ愕膶W(xué)習(xí)有所幫助。

標(biāo)簽: