package binarytree0804;
import lombok.Data;
@Data
public class Node {
private Integer data;
private Node left;
private Node right;
}
package binarytree0804;
public class BinaryTree {
public static Node insert(Node node, Node root) {
if (node.getData() < root.getData()) {
if (root.getLeft() == null) {
root.setLeft(node);
return root;
}
insert(node,root.getLeft());
}
if (node.getData() > root.getData()) {
if (root.getRight() == null) {
root.setRight(node);
return root;
}
insert(node,root.getRight());
}
return null;
}
public static Node search(Node node,Node root) {
if (node.getData() == root.getData()) {
return root;
}
if (node.getData() < root.getData()) {
if (root.getLeft() == null) {
return null;
}
return search(node,root.getLeft());
}
if (node.getData() > root.getData()) {
if (root.getRight() == null) {
return null;
}
return search(node,root.getRight());
}
return null;
}
public static Node delete(Node node,Node root) {
Node sn = search(node,root);
if ( sn == null) {
return null;
}
if (sn.getLeft() != null && sn.getRight() != null) {
Node cn = sn.getLeft();
sn.setData(sn.getRight().getData());
sn.setLeft(sn.getRight().getLeft());
sn.setRight(sn.getRight().getRight());
insert(cn,sn);
return sn;
}
if (sn.getLeft() != null) {
sn.setRight(sn.getLeft().getRight());
sn.setData(sn.getLeft().getData());
sn.setLeft(sn.getLeft().getLeft());
return sn;
}
if (sn.getRight() != null) {
sn.setLeft(sn.getRight().getLeft());
sn.setData(sn.getRight().getData());
sn.setRight(sn.getRight().getRight());
return sn;
}
sn.setData(null);
clear(root);
return sn;
}
public static void clear(Node root){
if (root != null) {
if (root.getLeft() != null) {
if (root.getLeft().getData() == null) {
root.setLeft(null);
}
clear(root.getLeft());
}
if (root.getRight() != null) {
if (root.getRight().getData() == null) {
root.setRight(null);
}
clear(root.getRight());
}
}
}
public static void main(String[] args) {
Node root = new Node();
root.setData(9);
Node n1 = new Node();
n1.setData(4);
insert(n1,root);
Node n2 = new Node();
n2.setData(11);
insert(n2,root);
Node n4 = new Node();
n4.setData(12);
insert(n4,root);
Node n3 = new Node();
n3.setData(2);
insert(n3,root);
Node n5 = new Node();
n5.setData(10);
insert(n5,root);
System.out.println(root);
System.out.println(delete(n5,root));
System.out.println(root);
System.out.println(search(n4,root));
}
}