数据结构与算法总结

数组

链表

  • 堆是一棵用数组表示的完全二叉树
  • 性质:结点 i i i的左孩子为 2 i + 1 2i+1 2i+1, 右孩子为 2 i + 2 2i+2 2i+2(下标从0开始)
  • 最大堆和最小堆
  • 向上调整(以最大堆为例):和其父结点比较大小,若小于父结点,则不调整;若大于父结点,则交换,然后令当前结点为父结点,继续向上调整,直到当前结点<=0(说明到达根节点)
  • 向下调整(以最大堆为例):和其两个子节点比较,若大于两个子节点,则不操作;否则,和两个子节点中更大的那个交换,令当前结点为之前交换的结点下标,继续向下调整。
  • 插入:每次插入到数组的最后,然后针对该结点进行一次向上调整;
  • 删除:将根节点与最后一个结点交换,删除最后一个结点,然后对根结点进行一次向下调整。
  • 将一个数组调整为堆:从最后一个非叶子结点 l e n / 2 − 1 len/2-1 len/21(下标从0开始)开始做向下调整,直到根结点做完一次向下调整。
  • 应用:堆排序(O(nlogn)),最大堆用于从小到大排序,最小堆用于从大到小排序;优先级队列(每次取最大的元素);数据流中找到最小的K个数

二叉树

基础

  • 二叉树的结点总数 n = n 0 + n 1 + n 2 n=n_0+n_1+n_2 n=n0+n1+n2, 2 n 2 + n 1 = n 0 + n 1 + n 2 − 1 2n_2+n_1=n_0+n_1+n_2-1 2n2+n1=n0+n1+n21 (二叉树中非空指针总数等于结点总数-1,因为没有指针指向根节点),因此有结论 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  • 高度为n、结点数也为n的二叉树,共有 2^(n-1)棵。
  • 一棵有 n n n个结点的二叉树,共有 2 n 2n 2n个指针,其中有 n − 1 n-1 n1个非空指针,则空指针有 n + 1 n+1 n+1个。
  • 中序遍历一颗二叉排序树可以得到一个有序的序列。
  • 在二叉链表上交换所有分支结点左右子树的位置,则利用后序遍历方法最合适。
  • 的存储结构:双亲表示法(利用数组存储结点,数组元素表示双亲所在位置)、孩子链表表示法、孩子兄弟表示法(二叉树表示)
  • 从树的二叉链表表示(孩子兄弟表示法)的定义可知,任何一颗和树对应的二叉树,其右子树一定为空。因为根节点没有兄弟。
  • 树的后序遍历实质上与树转换成二叉树的中序遍历相同;树的先序遍历与二叉树的先序遍历相同。
  • 二叉排序树插入、删除和查找算法的时间复杂度均为 O ( l g n ) O(lgn) O(lgn)

算法

(1) 遍历

  • 先序遍历:非递归借助栈
  • 中序遍历:非递归借助栈
  • 后序遍历:非递归借助栈
  • 层次遍历:非递归借助队列

基础

算法

(1)遍历

  • DFS :O(n+e)
  • BFS :O(n+e)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值