2016 - 2024

感恩一路有你

二叉搜索树的实现及测试

浏览量:2353 时间:2024-06-12 08:51:10 作者:采采

在 Java 数据结构教程中,二叉搜索树(Binary Search Tree)是一个非常重要的数据结构。本文将介绍如何使用 Java 实现二叉搜索树,并提供代码和测试用例。

创建树的节点类

在 Java 中,我们可以通过创建一个 TreeNode 类来定义树的节点。每个节点都有一个数据域、一个左子节点和一个右子节点。以下是 TreeNode 类的代码:

```java

public class TreeNode> {

T data;

TreeNode left;

TreeNode right;

public TreeNode(T data) {

data;

left right null;

}

}

```

创建二叉搜索树的类

接下来,我们需要创建一个 BinarySearchTree 类来定义二叉搜索树。在这个类中,我们使用了泛型来支持不同类型的数据。使用泛型的好处是可以进行比较。

以下是 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){

//有两个孩子,删除此节点比较麻烦

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);

("最大值 " ());

}

}

```

以上就是关于 Java 数据结构教程之二叉搜索树的实现及测试的内容。希望能够对你的学习有所帮助。

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。