树
实现
// 扩展版的链表
public class Node<T> {
public T data;
public Node<T> left; // small
public Node<T> right; //large
}
插入
public Node<T> insert(Node<T> node, T data){
if(node==null){
return new Node(data, null, null);
}else if(data<root.left) {
root.left = insert(root.left, data)
}else{
root.right = insert(root.right, data)
}
}
查找(二分)
public Node<T> find(Node<T> current, T value){
if(current==null){
return null;
}
if(current.data = value){
return current;
}
if(current.data > value){
return find(current.left, data);
}
return find(current.right, data)
}
删除
public void delete(T data, Node<T> current){
if(current==null) return; // not find, base case
if(data < current.data){ // in left tree
delete(data, current.left);
}else if (data > current.data){ in right tree
delete(data, current.right)
}else if(data = current.data){ // 删除逻辑
if(current.left!=null && current.right!=null){ // 双节点
current.data = findMin(current.right).data; // 用右子树的最小值覆盖要删除的值
delete(current.data, current.right); // 删除右子树的最小值
}else{
current = current.left==null ? current.left ? current.right; // 用唯一的子树覆盖当前节点
}
}
评价:
读快(二分查找)
写快(类似链表)