二叉搜索樹的實現(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
TreeNode
public TreeNode(T data) {
data;
left right null;
}
}
```
創(chuàng)建二叉搜索樹的類
接下來,我們需要創(chuàng)建一個 BinarySearchTree 類來定義二叉搜索樹。在這個類中,我們使用了泛型來支持不同類型的數(shù)據(jù)。使用泛型的好處是可以進(jìn)行比較。
以下是 BinarySearchTree 類的代碼:
```java
public class BinarySearchTree
TreeNode
public BinarySearchTree() {
null;
}
/
* 插入一個元素值;
* @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){ //有兩個孩子,刪除此節(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 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)教程之二叉搜索樹的實現(xiàn)及測試的內(nèi)容。希望能夠?qū)δ愕膶W(xué)習(xí)有所幫助。