File tree Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Expand file tree Collapse file tree 1 file changed +81
-0
lines changed Original file line number Diff line number Diff line change 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+ }
You can’t perform that action at this time.
0 commit comments