實現**如下:
private class node
}private node root;
private int size;
public bst ()
public int size()
public boolean isempty()
// 向二分搜尋樹中新增新的元素e
public void add(e e)
// 向以node為根的二分搜尋樹中插入元素e,遞迴演算法
// 返回插入新節點後的二分搜尋樹的根
private node add(node node, e e)
if (e.compareto(node.e) > 0) else
node.left = add(node.left, e);
return node;
}// 搜尋二分搜尋樹是否包含元素e
public boolean contains(e e)
private boolean contains(node node, e e)
else if (e.compareto(node.e) > 0)
return contains(node.right, e);
else
return contains(node.left, e);
}// 前序遍歷
public void perorder()
// 遞迴寫法
private void perorder(node node)
}// 中序遍歷
public void inorder()
private void inorder(node node)
// 後續遍歷
public void postorder()
private void postorder(node node)
}@override
public string tostring()
// 生成以node為根節點, 深度為depth的描述二叉樹的字串
private void generatebststring(node node, int depth, stringbuilder res)
generatebststring(node.left, depth+1, res);
generatebststring(node.right, depth+1, res);
}private string generatedepthstring(int depth)
return res.tostring();
}// 返回最小元素
public e minimum()
private node minimum(node node)
// 返回最大元素
public e maximum()
private node maximum(node node)
// 從二分搜尋樹中刪除最小值所在節點,返回最小值
public e removemin()
private node removemin(node node)
node.left = removemin(node.left);
return node;
}// 從二分搜尋樹中刪除最大值所在節點,返回最大值
public e removemax()
private node removemax(node node)
node.right = removemax(node.right);
return node;
}// 刪除元素為e的節點
public void remove(e e)
private node remove(node node, e e)
if (e.compareto(node.e) < 0)
else if (e.compareto(node.e) > 0)
else
if (node.right == null)
node successor = minimum(node.right);
successor.right = removemin(node.right);
successor.left = node.left;
node.left = node.right = null;
return successor;}}
}
測試**如下:
bstbst = new bst<>();
for (int i = 0; i < 100; i++)
// 前序遍歷
bst.perorder();
system.out.println();
// 中序遍歷
bst.inorder();
system.out.println();
// 後序遍歷
bst.postorder();
system.out.println();
system.out.println(bst.tostring());
}
二分搜尋樹(JAVA)
二分搜尋樹是在二叉樹的基礎上定義 所有節點的左子節點需要小於 不大於 該節點,右子節點需要大於 不小於 該節點 實現 如下 注意 這裡實現的二分搜尋樹會去重,如果允許重複節點,則在新增元素時,定義值相等的元素存放在節點的左子節點或右子節點中。public class bstcomparable pr...
遞迴非遞迴實現二分搜尋
二分搜尋方法,充分利用了元素間的次序關係,採用分治策略。可在最壞情況下用時間o logn 時間完成搜尋。includeint binarysearch recur int br,int x,int left,int right else else if x br middle else return...
二分搜尋樹 JAVA版
created by enzo cotter on 2018 7 16.public class bstextends comparable private node root private int size public bst public intsize public boolean ise...