/*** 二叉排序樹
(二叉檢索樹)*
*@author lao yang
*/public class binarysearchtree
/*** 插入乙個節點,假如已經存在這個值返回
false;
否則true**
@param
value
節點值*
@return
插入成功與否
*/public boolean
insert(int value)
private boolean
insert(node node, int value)
//值小於當前節點值
if (value < node.value)
//遞迴遍歷左子樹
return insert(node.leftchild
, value);
} /*
* 因為之前已經
return
此處是值小於當前節點值
* 和左子樹相同的判斷邏輯
*/if (node.rightchild == null)
return insert(node.rightchild
, value);
} /**
* 查詢指定值的節點**
@param
value
查詢的值
*@return
存在則返回節點
;否則返回
null
*/public node find(int value)
//沒找到 返回
null
return null;
} /**
* 刪除樹中的指定值,假如
value
存在,則刪除成功,返回
true;
刪除失敗,返回
false**
@param
value
指定的值
*@return
是否刪除成功
*/public boolean
delete(int value)
node p;
//查詢指定的值是否存在,不存在則沒法刪除,返回
false
if ((p = find(value)) == null)
return false;
//檢視找到的節點是它父節點的左子節點還是右子節點
boolean left = p.parent.leftchild == p;
node next = null;
//假如左節點為
null
,直接使用右節點替換父節點
if (p.leftchild == null) else if (p.rightchild == null) else
f.leftchild = p.leftchild
;next = p.rightchild;}
if (left) else
return true;
} /**
* 中序遍歷 是乙個排好序的由小到大的資料**
@return
排好序的字串
*/public string inorder()
private void
inorder(node node, stringbuilder stringbuilder)
if (node.rightchild != null)
}public static class node
}}
java實現二叉排序樹
二叉排序樹 非空左子樹的所有鍵值小於其根節點的鍵值 非空右子數的所有鍵值大於其根節點的鍵值 左右子數都是二叉排序樹 建立先是建立一棵樹 然後進行新增節點 比根節點小那麼就放到左子樹 在進行遞迴 比根節點大那麼就放到右子數 在進行遞迴 public void add node node if node...
二叉排序樹
在複習資料結構,把這個東西總結一下。這種結構是動態查詢表,這種動態是相對靜態查詢 順序查詢,折半查詢,分塊查詢等 來說的。對於各種靜態鍊錶,要達到查詢複雜度為o logn 必須要求有序 而要使插入刪除複雜度為o 1 必須是鍊錶儲存。動態查詢表就可以同時滿足這兩者。動態查詢表的特點是表結構本身在查詢過...
二叉排序樹
name 二叉排序樹相關操作 author unimen date 2011 10 8 13 14 21 刪除結點比較麻煩,總結如下 4大種情況 1 結點p無右孩子 將該點的左孩子變為其在雙親中的同位孩子 1 p為其雙親的左孩子時將其的左孩子變為雙親的左孩子 2 p為其雙親的右孩子時將其的左孩子變為...