package lessones01;
public class Node<T>{
public Node<T> left;
public Node<T> right;
public T value;
public Node(T arg_value){
value = arg_value;
}
public void setLeft(Node<T> arg_another){
_connect(arg_another,this);
}
public void setRight(Node<T> arg_another){
_connect(this,arg_another);
}
public void addLeft(Node<T> arg_another){
_connect(left,arg_another,this);
}
public void addRight(Node<T> arg_another){
_connect(this,arg_another,right);
}
public Node<T> remove(){
_connect(left,right);
return this;
}
private static <E> void _connect(Node<E> arg_left,Node<E> arg_right){
if(arg_left != null){arg_left.right = arg_right;}
if(arg_right != null){arg_right.left = arg_left;}
}
private static <E> void _connect(Node<E> arg_left,Node<E> node,Node<E> arg_right){
_connect(arg_left,node);
_connect(node,arg_right);
}
}