算法
咸鱼程序员
这个作者很懒,什么都没留下…
展开
-
二叉树的按行打印及之字形打印
1. 按行打印二叉树分析: 按行打印二叉树,我们能想到的就是层序遍历二叉树。关键是要按行打印出来,我们可以定义两个变量,一个用来保存下一层元素的个数,一个用来表示当前行打印的元素个数。class Solution {public: vector<vector<int> > Print(TreeNode* pRoot) { vector&...原创 2018-07-14 15:33:26 · 823 阅读 · 0 评论 -
二叉树面试题总结
二叉树是除了链表外最重要的数据结构之一,它的面试题也是很常见的,今天可以来总结一下。 1. 前/中/后遍历二叉树(递归&非递归) 2. 层序遍历二叉树 3. 按行层序打印二叉树 4、求二叉树的高度 5、求二叉树中结点的个数 6、求叶子结点的个数 7、求二叉树中第k层结点的个数 8、判断一个节点是否在一棵二叉树中 9、求二叉树中两个结点的最近公共祖先结点 10、判断一棵二...原创 2018-08-07 19:07:00 · 517 阅读 · 0 评论 -
链表面试题总结(二)
带头结点的单链表和不带头结点的单链表的区别 (1)从功能上讲,带头节点和不带头节点的单链表实现的功能是一样的,在删除和插入的效率是一样的,都是O(1)。 (2)从操作方面讲,带头节点的比不带头节点的单链表实现简单,一方面是不用改变头指针的指向,另一方面不管是在删除或者插入时,都保持了一致性,可以快速的定位链表中的第一个结点。 (3)如果为了在第一个数据元素前面加入新元素或者删除...原创 2018-08-06 11:55:18 · 168 阅读 · 0 评论 -
栈和队列面试题总结
假溢出是什么?怎么解决? 顺序队列因多次入队列和出队列操作后出现的尚有存储空间但不能再进行入队列操作的溢出称作为假 溢出。 顺序队列最大存储空间已经存满而又要求进行入队列操作所引起的溢出称为真溢出。 解决方法 在使用循环队列时判断队空和队满 1 少用一个存储单元 如果少用一个存储空间,则尾队尾指针加1等于队头指针为队列满的判断条件: (rear...原创 2018-08-05 22:38:03 · 348 阅读 · 0 评论 -
堆面试题总结
【堆面试题】 1. 实现堆创建,插入及删除 2. 优先级队列 3. 100w个数中找到最大的前K个数 4. 堆排序 【堆面试题解答】 1. 实现堆创建,插入及删除 在实现堆的创建时,我们以大堆为例,大堆的创建需要自上向下调整堆,创建堆的时间复杂度为O(log2 n)。 void AdjustDown(vector<int>& arr,int parent,in...原创 2018-08-09 23:31:41 · 1114 阅读 · 0 评论 -
链表面试题总结(一)
链表是面试最常问到的代码,虽然每个代码不长,但是逻辑能力和代码能力却能很好的体现出来。 我们就来看一下链表面试题都有什么吧! 1. 比较顺序表和链表的优缺点,说说它们分别在什么场景下使用? 2. 从尾到头打印单链表 3. 删除一个无头单链表的非尾节点(不能遍历链表) 4. 在无头单链表的一个非头节点前插入一个节点 5. 单链表实现约瑟夫环(JosephCircle) 6. 逆置/反转...原创 2018-08-04 15:13:50 · 303 阅读 · 0 评论 -
二叉树中两个结点的最远距离
二叉树是我们熟悉的数据结构之一,它的面试题也有很多,今天我们就来看下二叉树中两个结点的最远距离。分析:第一步: 第二步: 在分析完之后,我们就可以写代码了//方法一:求二叉树的左右子树的高度之和就是最远距离,但是要递归求,然后比较typedef int T;struct...原创 2018-06-22 10:17:07 · 2138 阅读 · 0 评论 -
图的广度优先遍历和深度优先遍历
给定一个图G和其中任意一个顶点v0,从v0出发,沿着图中各边访问图中的所有顶点,且每个顶 点仅被遍历一次。"遍历"即对结点进行某种操作的意思。1. 广度优先遍历广度优先遍历类似于二叉树的层序遍历,可以利用队列来实现。对于利用邻接表存储的图,我们给定任意一顶点,将与改顶点连接的链表遍历即可,一层一层的遍历。但是要注意可能会出现重复遍历,所以我们要添加标记。广度优先遍历的实现vo...原创 2018-05-04 21:59:10 · 3068 阅读 · 0 评论 -
复杂链表的复制
复杂链表的复制是一个难点,但是也是链表面试题的重点。今天我们就来看下复杂链表的赋值。1. 复杂链表(ComplexList)template<class T>struct ComplexListNode{ T _data; ComplexListNode<T>* pNext; //next指针域 ComplexListNode<T>* p...原创 2018-06-06 11:03:04 · 233 阅读 · 0 评论 -
排序双向链表和二叉树之间的转换
1. 由搜索二叉树转换为排序的双向链表分析(1)搜索二叉树的左子树小于根节点,右子树大于根节点,奠定了排序的基础,而二叉树既有左子树,又有右子树,使双向成为可能的,也就是说,是有可能实现他们之间的转化的。 (2)为了构造链表的双向,我们可以将原先指向左子树的指针调整为链表结点中的pPre(指向前驱结点的指针),将原先指...原创 2018-06-17 23:01:44 · 720 阅读 · 0 评论 -
树中两个结点的最低公共祖先
在进行这个问题之前,我们需要考虑以下几个问题:(1)题目告诉我们是树,但是没有告诉我们是一棵怎样的树。这里的树可以分为三种结构。第一种:普通的二叉树;第二种:结点中含有指向父亲结点的指针;第三种:二叉搜索树。(2)对于不同结构的树,处理的方式是不一样的,时间复杂度也是不一样的,我们需要针对每种结构设计解法。1. 二叉搜索树二叉搜索树的左子树比根节点小,右子树的值比根节点大,我们可以...原创 2018-06-19 12:06:54 · 491 阅读 · 0 评论 -
从一个有规律的数列中找被3整除的数
【题目描述】 小Q得到一个神奇的数列: 1, 12, 123,…12345678910,1234567891011…。 并且小Q对于能否被3整除这个性质很感兴趣。 小Q现在希望你能帮他计算一下从数列的第l个到第r个(包含端点)有多少个数可以被3整除。 输入描述: 输入包括两个整数l和r(1 &lt;= l &lt;= r &lt;= 1e9), 表示要求解的区间两端。 输出描述: ...原创 2018-08-15 16:50:17 · 2028 阅读 · 0 评论