成人AV在线无码|婷婷五月激情色,|伊人加勒比二三四区|国产一区激情都市|亚洲AV无码电影|日av韩av无码|天堂在线亚洲Av|无码一区二区影院|成人无码毛片AV|超碰在线看中文字幕

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

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

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

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

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

```java

public class TreeNode> {

T data;

TreeNode left;

TreeNode right;

public TreeNode(T data) {

data;

left right null;

}

}

```

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

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

以下是 BinarySearchTree 類的代碼:

```java

public class BinarySearchTree> {

TreeNode root;

public BinarySearchTree() {

null;

}

/

* 插入一個(gè)元素值;

* @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){

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

findMin(node).data;

node.right removeMin(node.right);

}else{

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

}

return node;

}

}

```

編寫測(cè)試用例

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

```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)教程之二叉搜索樹的實(shí)現(xiàn)及測(cè)試的內(nèi)容。希望能夠?qū)δ愕膶W(xué)習(xí)有所幫助。

標(biāo)簽: