随笔分类 -  数据结构

摘要:题目来源:《剑指offer》面试题58 题目:给定一个二叉树和其中一个节点,如何找出中序遍历顺序的下一个节点?树中的节点除了有两个分别指向左右子节点的指针以外,还有一个指向父节点的指针。 分析:有如下几种情况: 如果一个节点有右子树,那么它的下一个节点就是它的右子树中的最左子节点。 ... 阅读全文
posted @ 2015-09-02 15:10 vincently 阅读(1136) 评论(0) 推荐(0)
摘要:题目来源:《剑指offer》面试题27 题目:输入是一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新节点,只能调整树种节点指针的指向。二叉树节点的定义如下:struct BinaryTreeNode { int val; BinaryTreeNode* l... 阅读全文
posted @ 2015-09-01 23:01 vincently 阅读(1479) 评论(0) 推荐(0)
摘要:题目:输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列的结果,如果是,则返回true,如果不是则返回false。假设输入的数组的任意两个数字都互不相同。 分析:在后序遍历得到的序列中,最后一个数字是根节点的值。数组中前面的数字可以分为两个部分:第一部分是左子树节点的值,它们都比根节点... 阅读全文
posted @ 2015-09-01 20:45 vincently 阅读(1397) 评论(1) 推荐(0)
摘要:题目来源:《剑指offer》面试题18 输入两颗二叉树A和B,判断B是不是A的子结构。二叉树的节点定义如下:struct BinaryTreeNode { int value; BinaryTreeNode* left; BinaryTreeNode* ri... 阅读全文
posted @ 2015-09-01 17:02 vincently 阅读(441) 评论(0) 推荐(0)
摘要:图的深度优先搜索类似于树的深度优先搜索。不同的是,图中可能包括循环,即我们有可能重复访问节点。为了避免访问已经访问过的节点,我们要使用一个布尔变量的数组。 例如,在下图中,我们从节点2开始访问。当访问到节点0,我们寻找它的所有紧接节点。节点2也属于节点0的邻接节点。如果我们没有标记访问的节点,... 阅读全文
posted @ 2015-08-29 19:58 vincently 阅读(2017) 评论(0) 推荐(0)
摘要:图的广度优先搜索(BFS)与树的广度优先搜索类似。与树不同的是,图中可能存在循环。所我们可能会再次访问到同一个节点。为了表面多次处理同一个节点,我们要布尔变量数据记录节点有没有被访问过。为了简化,我们假设所有的节点都是从根节点可达的。 比如在下图中,我们从节点2出发。当我们访问到节点0时,我们... 阅读全文
posted @ 2015-08-29 17:19 vincently 阅读(1316) 评论(0) 推荐(0)
摘要:哈希表的基本概念 哈希表,也叫散列表,它是基于快速存取的角度设计的,是一种典型的“空间换时间”的做法。哈希表是普通数组的一种推广,因为数组可以直接寻址,故可在O(1)时间内访问数组的任意元素,其中它的插入和删除的时间复杂度也是O(1)。 哈希表是根据关键字(Key Value)而直接进行访问的数据结 阅读全文
posted @ 2015-08-20 08:45 vincently 阅读(1597) 评论(0) 推荐(0)
摘要:本文转载自:http://www.cnblogs.com/yangecnu/p/Introduce-B-Tree-and-B-Plus-Tree.html维基百科对B树的定义为“在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运... 阅读全文
posted @ 2015-05-24 21:46 vincently 阅读(179465) 评论(16) 推荐(49)
摘要:等价关系与等价类 若对于每一对元素(a,b),a,b∈S,a R b或者为true或者为false,则称在集合S上定义关系R。如果a R b为true,那么我们说a与b有关系。 等价关系(equivalence relation)是满足下列三个性质的关系R: (1) 自反性:对于所有a∈S,a... 阅读全文
posted @ 2015-04-11 22:23 vincently 阅读(4185) 评论(1) 推荐(0)
摘要:转自:http://www.acmerblog.com/suffix-array-6150.html 在字符串处理当中,后缀树和后缀数组都是非常有力的工具,其中后缀树大家了解得比较多,关于后缀数组则很少见于国内的资料。其实后缀数组是后缀树的一个非常精巧的替代品,它比后缀树容易编程实现,能够实现... 阅读全文
posted @ 2015-03-29 10:40 vincently 阅读(1427) 评论(0) 推荐(0)
摘要:在计算机科学中,trie,又称前缀树或字典树,是一种有种树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只... 阅读全文
posted @ 2015-03-13 15:52 vincently 阅读(387) 评论(0) 推荐(0)
摘要:首先定义二叉树的存储结构: 1 struct TreeNode {2 int val;3 TreeNode *left;4 TreeNode *right;5 6 TreeNode(int v, TreeNode* l = NULL, TreeNode *r = N... 阅读全文
posted @ 2015-01-17 11:23 vincently 阅读(2819) 评论(0) 推荐(0)
摘要:平衡树是计算机科学中的一类数据结构。平衡树是计算机科学中的一类改进的二叉查找树。一般的二叉查找树的查询复杂度是跟目标结点到树根的距离(即深度)有关,因此当结点的深度普遍较大时,查询的均摊复杂度会上升,为了更高效的查询,平衡树应运而生了。 在这里,平衡指所有叶子的深度趋于平衡,更广义的是指在树上... 阅读全文
posted @ 2015-01-15 12:38 vincently 阅读(1220) 评论(0) 推荐(0)
摘要:二叉搜索树,也叫二叉排序树、二叉查找树或BST(Binary Search Tree)。二叉搜索树或是一棵空疏,或者是一棵具有下列特性的非空二叉树:1. 若左子树非空,则左子树上的所有节点的关键字值均小于根节点的关键字的值。2. 若右子树非空,则右子树上的所有节点的关键字值均大于根节点的关键字的值。... 阅读全文
posted @ 2015-01-12 22:03 vincently 阅读(2981) 评论(0) 推荐(0)
摘要:二叉树的存储结构: 1 struct BinaryTreeNode {2 int val;3 BinaryTreeNode *left;4 BinaryTreeNode *right;5 6 BinaryTreeNode(in... 阅读全文
posted @ 2015-01-10 20:13 vincently 阅读(386) 评论(0) 推荐(0)
摘要:优先队列的实现 优先队列是拥有权值观念的队列,它允许加入新元素,移除旧元素、审视元素值等功能。由于这是一个queue,所以只允许在底端加入元素,并从顶端取出元素,除此之外无其他存取元素的途径。 优先队列带有权值观念,其内的元素并非按照被推入的次序排列,而是自动依照元素的权值排列(通常权值以实值表... 阅读全文
posted @ 2015-01-02 18:33 vincently 阅读(352) 评论(0) 推荐(0)
摘要:栈的实现(数组) 1 template class ArrayStack { 2 public: 3 ArrayStack(int c = 100): capacity(c), top(-1) { 4 data = new T[capacity](); 5 } 6 ... 阅读全文
posted @ 2014-12-31 17:03 vincently 阅读(386) 评论(0) 推荐(0)
摘要:1. 堆 堆是一颗被完全填满的二叉树,可能的例外是在底层,底层上的元素从左到右填入。这样的树称为完全二叉树。对于一个n个节点的完全二叉树,树高为logN.一个重要的观察发现,因为完全二叉树很有规律,所以可以用一个数组表示而不需要使用链。这种用数组表示树的方法称为隐式表述法(implicit rep... 阅读全文
posted @ 2014-12-30 13:42 vincently 阅读(626) 评论(0) 推荐(0)