JAVA 二叉排序樹

2021-07-30 06:25:47 字數 1974 閱讀 1747

/**

* 二叉排序樹

(二叉檢索樹)*

*@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為其雙親的右孩子時將其的左孩子變為...