Java遞迴實現二分搜尋樹

2021-09-24 18:05:09 字數 2587 閱讀 1872

實現**如下:

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...