![](https://img-blog.csdnimg.cn/20200310221719916.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Data Structure
数据结构的学习之旅
Gopher大威
双非硕士一枚,自学转计算机,实习,秋招拿下腾讯、华为、京东、360、顺丰、深信服等公司offer。专注于分享计算机基础知识,数据结构与算法,面经等。
展开
-
面试官:你能将遍历二叉树进一步优化到空间复杂度为O(1)吗?
我们知道,在遍历二叉树的时候,不管是用递归的方法,还是用非递归的方法,都无法做到额外空间复杂度为O(1)。这是因为遍历二叉树的递归方法实际上使用了函数栈,非递归的方法使用了申请的栈,两者的额外空间都与树的高度有关,所以空间复杂度为O(H),H为二叉树的高度。那么怎么做到将空间复杂度优化到O(1)呢?这就要用到大名鼎鼎的Morris遍历。一、什么是Morris遍历Morris遍历是二叉树遍历算法的超强进阶算法,与递归、非递归(栈实现)的空间复杂度比较,Morris遍历可以将非递归遍历中的空间复杂度降为O原创 2020-09-10 18:15:19 · 802 阅读 · 0 评论 -
你还在递归遍历二叉树吗?你要的迭代模板在这里
一、递归法递归三部曲:1、确定递归函数的参数和返回值void recursion(TreeNode *root)2、确定终止条件当前节点为空的时候,就返回if(!root) return;3、确定单层递归的逻辑//这里是前序遍历cout << root->val << endl;preorder(root->left);preorder(root->right);我们知道,前序遍历二叉树就是【中左右】,中序遍历二叉树就是【左中右】,后序原创 2020-08-31 12:08:48 · 274 阅读 · 0 评论 -
从底层认识priority_queue到用priority_queue解决有关顺序大小的题
一、认识priority_queuepriority_queue,即优先级队列,顾名思义,是一个拥有权值概念的queue,它允许加入新元素、移除旧元素、审视元素值等功能。由于这是一个queue,所以只允许在底端加入元素、并从顶端取出元素,除此之外,别无其他存取元素的途径。因为它不提供遍历的功能,也不提供迭代器。插入和删除元素的时候,会保证队头的元素一定是权值最大(小)的。究竟是最大还是最小,根据我们写的比较函数来实现。下文会有这方面的总结。那么大概了解priority_queue是什么样的数据结构之后,原创 2020-08-28 20:59:51 · 592 阅读 · 0 评论 -
单调栈解决Next Greater Number一类题
单调栈是什么?单调栈使得每次新元素入栈后,栈内元素都保持有序(单调递增或者单调递减)。单调递增栈:栈中数据出栈的序列为单调递增序列。单调递减栈:栈中数据出栈的序列为单调递减序列。注意:这里所说的递增递减是出栈的顺序,不是栈中数据的顺序。单调栈的应用通过使用单调栈,可以访问到下一个比它大(小)的元素。也就是说在队列或数组中,我们需要通过比较前后元素的大小关系来解决问题时,需要使用单调栈。例如,给一个数组[2, 1, 2, 4, 3],返回每个元素后面第一个比它自身大的数,如果没有就返回-1。第原创 2020-07-01 14:48:19 · 415 阅读 · 0 评论 -
反转单链表总结 多种方法图解
要求反转一个单链表,例如:输入:1->2->3->4->5->NULL输出:5->4->3->2->1->NULL方法一、双指针● 定义两个指针:pre和cur,pre在前面,cur在后面。● 每次让pre的next指向cur,实现一次局部反转。● 局部反转完成之后,pre和cur同时往前移动一个位置。● 循环上述过程,直至...原创 2020-05-02 21:44:11 · 402 阅读 · 0 评论 -
哈弗曼树的路径问题
普通给定一个数字或字符序列,构建哈夫曼树是非常简单易行的,只需要首先选择两个最小的元素做叶子结点,接着把它们的和与其他元素一起比较选择两个最小的元素结合在一起,直到所有元素都参与进来为止。 哈夫曼树所有的元素都在叶子结点上。OK,构造树本身不难,但是有些问法就很有创意,比如下面这个: (2015.3)下列选项给出的从根分别到两个叶子结点路径上的权值序列,能属于同一棵哈夫曼树的是:D. ...转载 2020-03-25 21:46:41 · 251 阅读 · 0 评论 -
简单明了图解 最小堆的构建、插入、删除过程
转载至https://blog.csdn.net/hrn1216/article/details/514652701.简介 最小堆是一棵完全二叉树,非叶子结点的值不大于左孩子和右孩子的值。本文以图解的方式,说明最小堆的构建、插入、删除的过程。搞懂最小堆的相应知识后,最大堆与此类似。2.最小堆示例3.最小堆的构建 &nb...转载 2020-03-10 22:27:16 · 1092 阅读 · 1 评论