二叉搜索数的插入、查找、删除
public class TestUtil {
public static void main(String[] args) {
TreeNode treeNode = new TreeNode();
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
for (Integer value : list) {
insert(treeNode, value);
}
}
private static void insert(TreeNode root, Integer value) {
if (root == null) {
TreeNode treeNode = new TreeNode();
treeNode.value = value;
treeNode.lChild = null;
treeNode.rChild = null;
root = treeNode;
}
if (root.value > value) {
insert(root.lChild, value);
}
if (root.value < value) {
insert(root.rChild, value);
}
}
private static TreeNode find(TreeNode root, Integer value) {
if (root == null || root.value.equals(value)) {
return root;
}
if (root.value > value) {
return find(root.lChild, value);
}
if (root.value < value) {
return find(root.rChild, value);
}
return null;
}
private static TreeNode delete(TreeNode root, Integer value) {
if (root == null) {
return root;
}
TreeNode father = null;
TreeNode delete = root;
while(delete != null) {
if (delete.value.equals(value)) {
break;
} if (delete.value > value) {
father = delete;
delete = delete.lChild;
} else {
father = delete;
delete = delete.rChild;
}
}
if (delete.lChild != null) {
if (delete.lChild.rChild == null) {
delete.value = delete.lChild.value;
delete.lChild = delete.lChild.lChild;
} else {
TreeNode preNode = delete.lChild;
TreeNode tempNode = delete.lChild.rChild;
while (tempNode.rChild != null) {
preNode = tempNode;
tempNode = tempNode.rChild;
}
delete.value = tempNode.value;
preNode.rChild = tempNode.lChild;
}
return root;
}
if (delete.rChild != null) {
if (delete.rChild.lChild == null) {
delete.value = delete.rChild.value;
delete.rChild = delete.rChild.rChild;
} else {
TreeNode preNode = delete.rChild;
TreeNode tempNode = delete.rChild.lChild;
while (tempNode.rChild != null) {
preNode = tempNode;
tempNode = tempNode.rChild;
}
delete.value = tempNode.value;
preNode.rChild = tempNode.lChild;
}
return root;
}
if (father == null) {
root = null;
} else if (father.lChild.value == delete.value) {
father.lChild = null;
} else {
father.rChild = null;
}
return root;
}
}
class TreeNode {
Integer value;
TreeNode lChild;
TreeNode rChild;
}
public class TestUtil {