1.. 二叉树 跟链表一样,二叉树也是一种动态数据结构,即,不需要在创建时指定大小. 跟链表不同的是,二叉树中的每个节点,除了要存放元素e,它还有两个指向其它节点的引用,分别用Node left和Node right来表示. 类似的,如果每个节点中有3个指向其它节点的引用,就称其为"三叉树"... 二叉树具有唯一的根节点. 二叉树中每个节点最多指向其它的两个节点,我们称这两个节点为"左孩子"和"右孩子",即每个节点最多有两个孩子. 一…
      1.. 线段树引入 线段树也称为区间树 为什么要使用线段树:对于某些问题,我们只关心区间(线段) 经典的线段树问题:区间染色,有一面长度为n的墙,每次选择一段墙进行染色(染色允许覆盖),问:经过m次操作后,可以看见多少种颜色?再进一步,经过m次操作后,在区间[i, j]中可以看到多少种颜色? 上面的问题涉及到了两种操作,即,染色操作(更新区间)和查询操作(查询区间),可以使用数组来对问题进行描述,这两种操作的时间复杂度如下: 由于通过数组来进行实现的时间复杂度达到了O(n)级别,因此…
      1.. 平衡二叉树 平衡二叉树要求,对于任意一个节点,左子树和右子树的高度差不能超过1. 平衡二叉树的高度和节点数量之间的关系也是O(logn) 为二叉树标注节点高度并计算平衡因子 AVL树是一棵平衡二叉树 2.. 实现AVL树的业务逻辑 import java.util.ArrayList; public class AVLTree<K extends Comparable<K>, V> { private class Node { public K key; pub…
      1.. 优先队列(Priority Queue) 优先队列与普通队列的区别:普通队列遵循先进先出的原则:优先队列的出队顺序与入队顺序无关,与优先级相关. 优先队列可以使用队列的接口,只是在实现接口时,与普通队列有两处区别,一处在于优先队列出队的元素应该是优先级最高的元素,另一处在于队首元素也是优先级最高的元素. 优先队列也可以使用不同的底层实现,不同底层实现的时间复杂度如下: 从上图可以看出,使用"堆"这种数据结构来实现优先队列是比较高效的. 2.. 二叉堆(Binary…
      1.. 链表的重要性 我们之前实现的动态数组.栈.队列,底层都是依托静态数组,靠resize来解决固定容量的问题,而"链表"则是一种真正的动态数据结构,不需要处理固定容量的问题: 链表是最简单的动态数据结构: 学习链表有助于更深入的理解"引用"(或指针): 学习链表有助于更深入的理解"递归": 链表可以用来辅助组成其他数据结构: 2.. 链表基础 数据存储在"节点"(Node)中: 链表的形象化解释如下图: 链表的…
      1.. 队列基础 队列也是一种线性结构: 相比数组,队列所对应的操作数是队列的子集: 队列只允许从一端(队尾)添加元素,从另一端(队首)取出元素: 队列的形象化描述如下图: 队列是一种先进先出(First In First Out)的数据结构: 2.. 队列的实现 任务目标如下: Queue<E> ·void enqueue(E) //入队 ·E dequeue() //出队 ·E getFront() //查看队首元素 ·int getSize() //查看队列中元素的个数 ·b…
二叉树的一个重要应用就是查找. 二叉搜索树 满足如下的性质: 左子树的关键字 < 节点的关键字 < 右子树的关键字 1. Find(x) 有了上述的性质后,我们就可以像二分查找那样查找给定的关键字x 具体如下: if x < node->val, Search in left sub-tree; else if x > node->val, Search in right sub-tree; else, found it! 2. Insert(x) 插入操作像Find(…
一.简介 在计算机科学中,二叉树是每个结点最多有两个子树的树结构.通常子树被称作“左子树”(left subtree)和“右子树”(right subtree).二叉树常被用于实现二叉查找树和二叉堆. 一棵深度为k,且有2^k-1个结点的二叉树,称为满二叉树.这种树的特点是每一层上的结点数都是最大结点数.而在一棵二叉树中,除最后一层外,若其余层都是满的,并且或者最后一层是满的,或者是在右边缺少连续若干结点,则此二叉树为完全二叉树.具有n个结点的完全二叉树的深度为floor(log2n)+1.深度…
jQuery 学习8 遍历-父亲兄弟子孙元素   jQuery遍历,可以理解为“移动”,使用“移动”还获取其他的元素.   什么意思呢?老师举一个例子: 班上30位同学,我是新来负责教这个班学生的老师,但我不认识所有学生,只认识上学期教过的几位同学.比如小明.我们再用一小串代码来作解释:   <body> <span id="ming">我是小明</span> <span>我坐在小明后面,我叫李四</span> </bo…
SOUI原来实现的SListBoxEx的效率一直是我对SOUI不太满意的地方.包括后来网友实现的SListCtrlEx. 这类控件为每一个列表项创建一个SWindow来容纳数据,当数据量比较大(10000+)时,一方面内存消耗会很严重:另一方面列表数据初始化也需要大量的时间. 今年开始转型做Android开发.大家都知道Android开发APP和PC上开发APP相比要简单很多,其中我个人体会最深的就是Android的ListView控件. 在Android中,ListView中列表项的显示采用控…