Skip to content

Commit 96d3080

Browse files
Create BinarySearchTree.java
1 parent 97a9e31 commit 96d3080

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

java/24_tree/BinarySearchTree.java

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
public class BinarySearchTree {
2+
private Node tree;
3+
4+
public Node find(int data) {
5+
Node p = tree;
6+
while (p != null) {
7+
if (data < p.data) p = p.left;
8+
else if (data > p.data) p = p.right;
9+
else return p;
10+
}
11+
return null;
12+
}
13+
14+
public void insert(int data) {
15+
if (tree == null) {
16+
tree = new Node(data);
17+
return;
18+
}
19+
20+
Node p = tree;
21+
while (p != null) {
22+
if (data > p.data) {
23+
if (p.right == null) {
24+
p.right = new Node(data);
25+
return;
26+
}
27+
p = p.right;
28+
} else { // data < p.data
29+
if (p.left == null) {
30+
p.left = new Node(data);
31+
return;
32+
}
33+
p = p.left;
34+
}
35+
}
36+
}
37+
38+
public void delete(int data) {
39+
Node p = tree; // p指向要删除的节点,初始化指向根节点
40+
Node pp = null; // pp记录的是p的父节点
41+
while (p != null && p.data != data) {
42+
pp = p;
43+
if (data > p.data) p = p.right;
44+
else p = p.left;
45+
}
46+
if (p == null) return; // 没有找到
47+
48+
// 要删除的节点有两个子节点
49+
if (p.left != null && p.right != null) { // 查找右子树中最小节点
50+
Node minP = p.right;
51+
Node minPP = p; // minPP表示minP的父节点
52+
while (minP.left != null) {
53+
minPP = minP;
54+
minP = minP.left;
55+
}
56+
p.data = minP.data; // 将minP的数据替换到p中
57+
p = minP; // 下面就变成了删除minP了
58+
pp = minPP;
59+
}
60+
61+
// 删除节点是叶子节点或者仅有一个子节点
62+
Node child; // p的子节点
63+
if (p.left != null) child = p.left;
64+
else if (p.right != null) child = p.right;
65+
else child = null;
66+
67+
if (pp == null) tree = child; // 删除的是根节点
68+
else if (pp.left == p) pp.left = child;
69+
else pp.right = child;
70+
}
71+
72+
public static class Node {
73+
private int data;
74+
private Node left;
75+
private Node right;
76+
77+
public Node(int data) {
78+
this.data = data;
79+
}
80+
}
81+
}

0 commit comments

Comments
 (0)