数据结构 —— 递归和树

概况:

递归和分治

  • 递归中用到了分治法。
  • 分治法的思想简单概括就是“分而治之”。
  • 递归实际使用“栈”来实现的。
  • 递归包括递归方程、临界条件:

  • EX:实现随机斐波那契数列?汉诺塔?八皇后-->N皇后?
  • 时间复杂度:递归时间复杂度是很大的。

       So可以用记忆递归法:牺牲空间,换取时间。(办法:放到数组里,数组空间浪费大,但读取快)

     Ex:HDU 2041 超级楼梯、HDU 2044  一只小蜜蜂...

  • 综上,做递归的题,要先分析,再总结出递归方程。

    Ex:HDU 2050 折线分割平面 (标准递归题)

  • 二分搜索(大整数的乘法、矩阵乘法(棋盘覆盖))
  • 合并排序
  • 快速排序

  • 树的分支最多有2个。又叫孩子数。结点的左孩子,右孩子。
  • 度是孩子个数。
  • 叶子结点:度为0
  • 基本概念:
  树:树要么为空,要么由根结点和n(n>=0)棵子树组成
  森林:由m(m>=0)棵树组成
  结点的度:结点拥有的子树数
  树的度:树内各结点度的最大值
  叶子:度为零的结点,也称终端结点。
  结点的层次:从根开始为第1层,根的孩子为第2层,依此类推。
  树的深度:树内结点的最大层次
  有序树和无序树:如果将树中结点各子树看成是从左到右有次序的,称之有序,否则无序。
 
  • 树的遍历:
  • Huffman树:
  一个无序数列,取这个数列中最小的两个数相加,和替代原来数组中原来这两个数,并作为二叉树中一个结点以及结点的两个孩子,不断重复这个过程,直到最后  构成一棵唯一的二叉树。
  Ex:HDU 1710、HDU 1053
 
  • 并查集:
  由“并”和“查”组成。
  • find();  //查。查找某个元素的根(root)元素是谁,返回根元素的值。
  • merge();    //并。如果查(find)出的根(root)元素相同,说明有联系,将有联系的元素并到一个集合中。
  Ex:HDU 1232  //这道题就是求最后有几个集合,只要求出来了,就做出来了。
 

 

Freecode : www.cnblogs.com/yym2013

posted @ 2013-08-08 20:43  Freecode#  阅读(465)  评论(0编辑  收藏  举报