定义:数组是一种 线性表 数据结构,它用一组 连续的内存空间 存储一组具有 相同类型 的数据。
Java中 基本数据类型数组 的存储格式:
int arr[] = new int[3];
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;

Java中 对象数组 的存储格式:
public class Person {
private String name;
public Person(String name) {
this.name = name;
}
}
Person arr[] = new Person[3];
arr[0] = new Person("Peter");
arr[1] = new Person("Leo");
arr[2] = new Person("Cina");

定义:链表由一系列节点组成,每个节点除存储数据本身外,还需要额外存储下一个节点的地址。

定义:从操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端(也就是栈顶)插入和删除数据。
特性:先进后出。

定义:从操作特性上来看,队列也是一种“操作受限”的线性表,其限制是仅允许在表的一端(队头)进行插入,而在表的另一端(队尾)进行删除。
特性:先进先出。


定义:每个节点最多有2个子节点,分别是左子节点和右子节点。二叉树并不要求每个节点都必须要有两个子节点。
二叉树链式存储方式的Java代码实现:
public class Node {
public int val;
public Node left;
public Node right;
}
二叉树基于数组的顺序存储方式实现:
用数组来存储所有的节点。对于节点之间的父子关系,通过数组下标计算得到。如果节点 X 存储在数组中下标为 i 位置,那么, 下标为 2i 的位置存储的就是它的左叶子节点,下标为 2i+1 的位置存储的就是它的右叶子节点。(为了方便计算,根节点一般会用下标为1的位置存储)

定义:除子节点外,每个节点都有左右两个子节点,并且子节点都在最底层的二叉树。

定义:叶子节点只在最底层和倒数第二层,并且最底层的叶子节点都 靠左排列 的二叉树。


如果是 非完全二叉树,基于数组的顺序存储方式,会“浪费”比较多的数组存储空间。

定义:二叉查找树中的任意一个节点,其左子树中每个节点的值都要小于这个节点的值,而右子树中每个节点的值都要大于这个节点的值。 二叉查找树也被称为二叉搜索树,可以实现快速查找、插入、删除操作。

定义:二叉树中任意一个节点的左右子树的高度相差不能大于1。

定义:
class RedBlackTreeNode {
public int val;
public RedBlackTreeNode left;
public RedBlackTreeNode right;
// 节点的颜色属性,设置true表示红色
public boolean color;
// 节点的parent属性
public RedBlackTreeNode parent;
}

定义:
