二叉排序樹
非空左子樹的所有鍵值小於其根節點的鍵值
非空右子數的所有鍵值大於其根節點的鍵值
左右子數都是二叉排序樹
建立先是建立一棵樹 然後進行新增節點
比根節點小那麼就放到左子樹 在進行遞迴
比根節點大那麼就放到右子數 在進行遞迴
public void add(node node)
if (node.value < this.value) else
} else else
} }
查詢
類似於二分查詢
public node search(int value) else if (value < this.value)
return leftnode.search(value);
} else if (value > this.value)
return rightnode.search(value);
} else
}
刪除
要分成三種情況
1.刪除的是葉子節點 不讓前面的節點指向他就ok了
2.刪除的節點有乙個子節點 讓其父節點指向他的子節點就ok了
3.刪除的節點有左右兒子 用另外的節點去代替被刪的節點
(1)右子數的最小元素 或者 (2)左子樹的最大元素
首先是先寫乙個找父節點的方法
public node searchparent(int value) else else if (this.value < value && this.rightnode != null)
return null;
} }
刪除葉子節點的時候
這個葉子節點是父節點的左二子 那麼父親的左兒子設為空 反之同樣
if (parent.leftnode.value == value) else
}
刪除有兩個兒子的時候
找到(1)右子數的最小元素 或者 (2)左子樹的最大元素
然後去替換要刪除的節點的值
可以直接刪了這個節點的右子樹的最小元素 獲取了這個值 讓被刪的節點的值等於這個值
private int deletemin(node node)
delete(target.value);
return target.value;
}
int min = deletemin(target.rightnode);
target.value = min;
刪除只有乙個兒子的時候
刪除的節點是父親的左兒子 並且自己有左兒子 那麼讓父親的左兒子指向自己的左兒子
。。。
else else
} else else }}
放在一起好亂。。。。
class node
public void add(node node)
if (node.value < this.value) else
} else else
} }public void midshow(node node)
midshow(node.leftnode);
system.out.print(node.value + " ");
midshow(node.rightnode); }
public node search(int value) else if (value < this.value)
return leftnode.search(value);
} else if (value > this.value)
return rightnode.search(value);
} else }
public node searchparent(int value) else else if (this.value < value && this.rightnode != null)
return null;
} } }
public class binarysearchtree else }
public void midshow() }
public node search(int value) else }
public node searchparent(int value) else }
private int deletemin(node node)
delete(target.value);
return target.value; }
public void delete(int value) else
node parent = searchparent(value);
if (target.leftnode == null && target.rightnode == null) else
} else if (target.leftnode != null && target.rightnode != null) else else
} else else }}
} }}
測試
JAVA 二叉排序樹
二叉排序樹 二叉檢索樹 author lao yang public class binarysearchtree 插入乙個節點,假如已經存在這個值返回 false 否則true param value 節點值 return 插入成功與否 public boolean insert int valu...
二叉排序樹建立 JAVA實現
最近看了一下二叉排序樹的建立,自己寫了一段 用來建立二叉排序樹,給定乙個陣列,對這個陣列中的數字進行建立二叉排序樹。分兩種情況 1 陣列中的數字是隨機的,也就是說沒有順序 eg int a 用這個陣列中的數字建立二叉排序樹,注意這裡的二叉排序樹是隨便的,沒有特殊的要求 比如建立高度最小的二叉排序樹 ...
二叉排序樹的java實現
private class node private node root 二叉查詢樹的根節點 獲取整個二叉查詢樹的大小 return public intsize 獲取某乙個結點為根結點的二叉查詢樹的大小 param x return private intsize node x else 查詢 通...