-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathTreeNode.java
107 lines (88 loc) · 2.72 KB
/
TreeNode.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
public static class TreeNode
{
private TreeNode left;
private TreeNode right;
private TreeNode parent;
private int value;
public TreeNode(int val) {
this.value = val;
}
public TreeNode add(int value) {
if (value > this.value) {
if (right == null) {
right = new TreeNode(value);
right.parent = this;
return right;
}
else {
return right.add(value);
}
}
else {
if (left == null) {
left = new TreeNode(value);
left.parent = this;
return left;
}
else {
return left.add(value);
}
}
}
public int getMax() {
int max_value = value;
TreeNode root = this;
while(root != null) {
if (root.value > max_value)
max_value = root.value;
root = root.right;
}
return max_value;
}
public TreeNode getLeftMost(TreeNode root) {
while (root != null && root.left != null) {
root = root.left;
}
return root;
}
public TreeNode remove(TreeNode n) {
TreeNode parent = n.parent;
if (n.right != null && n.left != null) {
TreeNode p = getLeftMost(n.right);
remove(p);
if (parent != null) {
p.left = n.left;
p.right = n.right;
_updateNode(n, p);
return null;
}
else {
p.left = this.left;
p.right = this.right;
p.parent = null;
return p;
}
}
else if (n.right != null) {
_updateNode(n, n.right);
}
else if (n.left != null) {
_updateNode(n, n.left);
}
else {
_updateNode(n, null);
}
return null;
}
protected void _updateNode(TreeNode removed, TreeNode newNode) {
TreeNode parent = removed.parent;
if (parent.left == removed) {
parent.left = newNode;
}
else {
parent.right = newNode;
}
if (newNode != null)
newNode.parent = parent;
}
}