数组
特点
链表
单向链表
双向链表
特点
Demo
LinkedList
private static class Node<E> {
E item; //节点的元素
Node<E> next; //下一个节点
Node<E> prev; //上一个节点
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
树
二叉树
- 某节点的左子树的值必须小于该节点的值
- 某节点的右子树的值必须大于该节点的值
不平衡二叉树
特点
查询效率太低,如果我现在要查1,必须要查6次才能查到。下面的红黑树就是为了优化二叉树平衡的一种解决方案
红黑树
红黑树是一个自平衡(不是绝对的平衡)的二叉查找树
特点
- 每个节点要么是黑色,要么是红色
- 根节点都是黑色
- 每个叶子节点都是黑色
- 每个红色节点的两个字节点一定是黑色
- 任意一节点到每个叶子节点的路径中都包含相同的黑色节点
红黑树练习网站: http://algoanim.ide.sk/index.php?page=showanim&id=63
红黑树能自平衡,它靠的是什么?三种操作:左旋、右旋和变色
原理
- 左旋:以某个结点作为支点(旋转结点),其右子结点变为旋转结点的父结点,右子结点的左子结点变为旋转结点的右子结点,左子结点保持不变。
- 右旋:以某个结点作为支点(旋转结点),其左子结点变为旋转结点的父结点,左子结点的右子结点变为旋转结点的左子结点,右子结点保持不变。
- 变色:结点的颜色由红变黑或由黑变红。