java實現二叉排序樹

2021-09-17 23:36:40 字數 3174 閱讀 8075

二叉排序樹

非空左子樹的所有鍵值小於其根節點的鍵值

非空右子數的所有鍵值大於其根節點的鍵值

左右子數都是二叉排序樹

建立先是建立一棵樹 然後進行新增節點

比根節點小那麼就放到左子樹 在進行遞迴

比根節點大那麼就放到右子數 在進行遞迴

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 查詢 通...