随笔分类 - data structure
摘要:题目链接:kth-largest-element-in-an-array 方法1: 使用快速排序。 1、对数组进行partition,从left到right随机选择一个主元pivot,将pivot与left的元素交换位置。 另索引 j 初始为left,扫描从left + 1到right的元素,若小于
阅读全文
摘要:Reference:浙大数据结构慕课 1、非递归中序遍历 1)定义一个栈。 2)一直向左节点访问,将访问到的节点入栈,直到节点为空。 3)栈顶pop出一个节点,指针指向其右节点,重复上述过程。 code: 1 bool inOrder(TreeNode *root) { 2 stack<TreeNo
阅读全文
摘要:An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可。
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法。 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录。
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径。 简单版本用dfs实现,而这道题用BFS实现。 注意: 岛半径为7.5,而不是15。另外注意一步跳到岸边的情况。
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索。
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目 题目要求分别以深度优先搜索和广度优先搜索输出图的连通集。 广度优先搜索要用到队列,先回顾一下循环队列: 注意广度优先搜索BFS要在一个顶点入队的时候将其标记,而不是出队的时候。 另外c++全局变量会默认初始化。 还有形参要加上引用符号,否则改变不了实参的
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种。 解题思路: 1、构造哈夫曼树,并求出总代价COST,即各个字母的频数乘以编码长度的和。 2、对于题目给出的每
阅读全文
摘要:其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集。 开始把数组中每个元素初始化为-1,代表没有父节点。为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量包含的节点数,然后在union时把小的树并到大的树上。 另外在find操作时可以用递归的方式使查找路
阅读全文
摘要:编程题6 树的同构 编程题7 List Leaves 编程题8 Tree Traversals Again 编程题10 Root of AVL Tree 编程题12 堆中的路径 编程题13 File Transfer 编程题14 Huffman Codes 编程题15 列出连通集 编程题16 Sav
阅读全文
摘要:其它pta数据结构编程题请参见:pta 这道题考察的是最小堆。 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1。 插入元素:先把元素放到数组的最后面,然后不断循环和父节点比较,如果小于父节点则交换。 数组的下标为0存放一个
阅读全文
摘要:其它pta数据结构编程题请参见:pta 这道题考察平衡二叉查找树的插入。 为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整。 分为以下四种情况: 插入新节点后,以及旋转之后,需要更新结点的高度。 RL旋转可以通过右孩子的LL旋转,然后当前节点的RR旋转实现。 同理,LR旋转
阅读全文
摘要:其它pta数据结构编程题请参见:pta 这次的作业考察的是树的遍历。 题目的输入通过栈的pop给出了树的中序遍历的顺序。根据push和pop的顺序构造树的方法为:定义一个变量father来确定父节点,如果父节点还没有pop,那么push操作就构造父节点的左子树,否则构造父节点的右子树;定义一个栈用来
阅读全文
摘要:其它pta数据结构编程题请参见:pta 这次的编程作业要求从上到下,从左到右输出一棵树的叶子节点,即树的层序遍历,用队列的方式来实现。 注意enqueue和dequeue函数参数为Queue &q,而不是Queue q,即用引用的方式才能改变实参的值。
阅读全文
摘要:其它pta数据结构编程题请参见:pta 题目请参见:树的同构 因题目中左右子树是按照下标给出,因此用数组存放树是更好的方法。 判断两棵树是否同构:用递归的方法。如果当前两个结点都为空,则返回TRUE;如果一个结点空一个不空,或者两个结点都不为空但是结点存储的数据不同,则返回FALSE。然后递归地的调
阅读全文

浙公网安备 33010602011771号