二叉树的相关整理(暂定)

在这里插入代码片常见算法运行时间:

  • O(n!),后面的括号中有一个函数,指明某个算法的耗时/耗空间与数据增长量之间的关系。其中的n代表输入数据的量;旅行商解决方案;
  • O(n),代表数据量增大几倍,耗时也增大几倍。遍历算法
  • O(n^2),代表数据量增大n倍时,耗时增大n的平方倍,冒泡排序
  • O(logn),当数据增大n倍时,耗时增大logn倍;二分查找
  • O(n * logn),当数据增加N倍,数据增加256,耗时*8。快速排序算法;
  • 数组的元素都在一起,在内存中是连续的;

链表的元素都是分开的,其中每个元素都存储下一个元素的地址;
每个递归函数都有两部分:基线条件(base case)和递归条件(recursive base)
总结:

  • 递归指的是调用自己的函数;
  • 每个递归函数都有两个条件:基线条件和递归条件。
  • 栈有两种操作:压入和弹出。
  • 所有函数调用都进入调用栈。
  • 调用栈可能很长,这将占用大量的内存。

排序

十种常见排序算法可以分为两大类:

非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序。
线性时间非比较类排序:不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此称为线性时间非比较类排序。

  1. 冒泡排序:重复地走访过要排序的元素,依次比较相邻两个元素,如果他们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。时间复杂度: O(n^2)
  2. 选择排序:初始时在序列中找到最小(大)元素,放到序列的起始位置作为已排序序列;然后,再从剩余未排序元素中继续寻找最小(大)元素,放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 时间复杂度:O(n^2)
  3. 插入排序
  4. 希尔排序
  5. 归并排序
  6. 快速排序
  7. 堆排序

二叉树:

  • 树的定义: 是一种非线性数据结构,相当于线性数据而言,树的运行时间更短。
    树是N (N≥1 N\geq1N≥1) 个结点的有限集合

树的分类:

  • 定义:二叉树是有序的节点集合

  • 普通二叉树、完全二叉树、满二叉树

  • 二叉树:最多有两棵子树的树被称为二叉树

  • 斜树:都斜向一边的树,左(右)子树

  • 满二叉树:二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上

  • 完全二叉树:如果一个二叉树与满二叉树前m个节点的结构相同,这样的二叉树被称为完全二叉树

  • 也就是说,如果把满二叉树从右至左、从下往上删除一些节点,剩余的结构就构成完全二叉树

  • 二叉树的性质:

  1. 二叉树第i层的节点数最多为2{i-1} (i≥1)。
  2. 深度为K的二叉树至多有2{k}-1个节点(k≥1)。
  3. 包含n个节点的二叉树的高度至少为log2(n+1)。
  4. 在任意一颗二叉树中,诺终端节点的个数为n0,度为2的结点数为n2,则n0=n2+1。
  • 前序,中序,倒序:—
    在这里插入图片描述
  1. 前序:根在前,同级先左后右 (ABCDEFGHK)
  2. 中序:先左后根右最后(BDCAEHGKF)
  3. 倒序:先左后右根最后(DCBHKGFEA)

红黑树:

每个节点或是红色的,或是黑色的,根节点是黑色的,每个叶节点(NIL)是黑色的,如果一个节点是红色的,则它的两个子节点都是黑色的,对于每个节点,从该节点到其所有后代叶节点的简单路径上,均包含相同数目的黑色节点。时间复杂度为O(logn)

跳表:

跳表是平衡树的一种替代的数据结构,他的时间复杂度为O(logn),而普通单链表查询一个元素的时间复杂度为O(n)

动态分析:

动态规划算法是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决。

发布了12 篇原创文章 · 获赞 3 · 访问量 304

猜你喜欢

转载自blog.csdn.net/speriuder/article/details/102613330