二叉搜索樹的實(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
TreeNode
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
public BinarySearchTree() {
null;
}
/
* 插入一個(gè)元素值;
* @param data
*/
public void insert(T data){
root insert(data, root);
}
protected TreeNode
if(node null)
node new TreeNode
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 if(node null) return; ( " "); preOrder(node.left); preOrder(node.right); } / * findMin 遞歸解法 */ public T findMin(){ TreeNode return ; } protected TreeNode if(node.leftnull) return node; return findMin(node.left); } / * findMax 遞歸解,非遞歸解 */ public T findMax(){ TreeNode return ; } protected TreeNode if(node.rightnull) return node; return findMax(node.right); } / * removeMin */ protected TreeNode if(nodenull) throw new RuntimeException("空樹"); else if(node.left!null){ node.left removeMin(node.left); return node; }else{ return node.right; } } protected TreeNode 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 Integer[] datas {2,8,7,4,9,9,3,1,6,7,5}; (datas); (); } @Test public void testFindMin() { BinarySearchTree Integer[] datas {2,8,7,4,9,3,1,6,7,5}; (datas); ("最小值 " ()); } @Test public void testFindMax() { 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í)有所幫助。