Skip to content

数据结构

基本数据结构有数组(连续)和链表(非连续)两种。其他数据结构如栈、队列、堆、图等都属于基于两者的不同具体。

  • 数组:连续的内存空间,可以随机访问,但必须在初始化时确定大小。数组扩容需要重新分配一块内存空间,然后把内容全部复制过去,时间复杂度 O(n)。随机元素的删除(插入)同样也是需要将后面的元素前移一位,时间复杂度 O(n)。

  • 优点:可以随机访问;节省存储空间(不需要额外的索引)

  • 链表:不连续的内存空间,每个元素保存指向前(后)元素的指针,会造成额外的空间开销。不支持随机访问,只能通过指针(索引)访问元素。但是插入和删除的时间复杂度是 O(1)。

  • 优点:不存在扩容问题,插入和删除的时间复杂度是 O(1)。

二叉树

遍历 Binary Tree Traversal

分为递归式和迭代式,递归式简单,迭代式可以用Stack实现。

遍历的前后顺序是相对于根节点而言的,即根节点在最前为前序遍历,根节点在最后为后序遍历。

前序遍历 preorder

中 -> 左 -> 右

中序遍历 inorder

左 -> 中 -> 右

后序遍历 postorder

左 -> 右 -> 中