
剑指offer
剑指offer--练习总结
进阶er
进阶
展开
-
【剑指offer】树的深度非递归JS
题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度思路:使用层次遍历,在每一层节点的末尾加上标记0,每次出队列遇到标记0,深度+1;关键点是最后一个标记,此时队列为空,要特判function treeDepth(pRoot){ if(pRoot== null)return 0; let deep = 1;...原创 2020-04-08 22:21:11 · 348 阅读 · 0 评论 -
【剑指offer】二叉树中和为某一值的路径(JS)
题目描述:输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:看到这个题,首先想到深搜????,深度遍历直到叶子节点,不符合条件再出栈回到上一层节点,注意结束条件以及最后的回溯????/* function TreeNode(x) { ...原创 2020-02-28 16:24:58 · 482 阅读 · 0 评论 -
【剑指offer】二叉搜索树的后序遍历序列
题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:二叉搜索树的特点:根节点的左子树上的值都比它小,右子树上的值都比它大1.找出序列中左右子树的分界点,即从数组起始点开始第一个比根节点(后序序列的最后一个值)大的值,其为flag2.若右子树的值都比根节点大,则它是某个二叉搜索树的后...原创 2020-02-28 15:01:53 · 145 阅读 · 0 评论 -
【剑指offer】栈的压入、弹出序列(JS实现)
题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:<借鉴别人思路>借助一个辅助栈,遍历压栈序列,先将第一个...原创 2020-02-28 11:26:12 · 261 阅读 · 0 评论 -
【剑指offer】包含Min函数的栈(JS实现)
题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。注意:保证测试中不会当栈为空的时候,对栈调用pop()或者min()或者top()方法。思路:维护两个栈A,B,分别记录输入的所有值 和 最小值每输入一个值,正常入A栈,但是如果比栈B的栈顶元素小的话,则入B栈,否则B中的栈顶元素重复入栈一次,这样做是为了保证每次取最小值...原创 2020-02-28 10:54:12 · 235 阅读 · 0 评论 -
【剑指offer】顺时针打印矩阵(JS实现)
题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:打印循环结束的条件是每个轮回开始点下标的2倍超过矩阵的大小function printMatrix(m...原创 2020-02-27 15:18:42 · 324 阅读 · 0 评论 -
【剑指offer】树的子结构(JS实现)
题目描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)思路:如果A,B根节点值相同,进一步判断其子树的值;否则在A的左子树、右子树中寻找/* function TreeNode(x) { this.val = x; this.left = null; this.right = null;} */ function...原创 2020-02-27 12:45:32 · 286 阅读 · 0 评论 -
【剑指offer】链表中倒数第k个结点(JS实现)
题目描述输入一个链表,输出该链表中倒数第k个结点。思路一:两个指针:fast、slow,快指针先走k-1步,之后两个指针一起走,同样的速度,当快指针到达链表末尾的时候,慢指针正好走到目标节点/*function ListNode(x){ this.val = x; this.next = null;}*/function FindKthToTail(head, k)...原创 2020-02-27 12:13:56 · 258 阅读 · 0 评论 -
【剑指offer】反转链表
每次遇到就地反转的链表就得写好久,几个指针指来指去,搞得晕头转向,这次可把它理清楚了????????????题目描述输入一个链表,反转链表后,输出新链表的表头。思路:我采用的是就地反转/*function ListNode(x){ this.val = x; this.next = null;}*/function ReverseList(pHead){ // wr...原创 2020-02-26 14:27:12 · 145 阅读 · 0 评论 -
【剑指offer】二进制中1的个数(JS实现)
题目描述:输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。方法一:把一个整数减去1,再和原来的整数做相与运算,会把该整数二进制的最右边的1变成0,一个整数中有多少个1,就可以进行多少次上述的相与运算function NumberOf1(n){ // write code here //把一个整数减去1,再和原来的整数做相与运算,会把该整数二进制的最右边的1...原创 2020-02-25 13:47:02 · 216 阅读 · 0 评论 -
【剑指offer】滑动窗口的最大值(JS实现)
题目描述:给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,...原创 2020-02-24 18:12:11 · 371 阅读 · 0 评论 -
【剑指offer】重建二叉树(JS实现)
题目描述:输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回(1)前序遍历:根左右(2)中序遍历:左根右(3)后序遍历:左右根可以根据前序+中序或者中序+后序确定一棵唯一的二叉树,但是前序+后序不能,因为只...原创 2020-02-23 18:37:17 · 205 阅读 · 0 评论 -
【剑指offer】按之字形顺序打印二叉树(JS实现)
题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。实现思路:广搜的思想,使用两个栈实现,奇数行:从左->右打印,在打印奇数行时,将其子节点按照先左后右的顺序添加到另一个栈中;偶数行:从右->左打印,在打印偶数行时,将其子节点按照先右后左的顺序添加到奇数栈中。/* functio...原创 2020-02-23 16:24:43 · 412 阅读 · 0 评论 -
【剑指offer】二叉搜索树的第K个节点(JS实现)
题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。实现思路:二叉搜索树的中序遍历结果是有序的,使用中序遍历,每遍历一个节点,k-1,直到k减到1,即为第K小的节点function KthNode(pRoot, k){ if(!pRoot || !k){ return null;...原创 2020-02-22 14:44:35 · 339 阅读 · 0 评论 -
【剑指offer】数据流中的中位数
题目描述:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。let arr = []function Insert(num){ // write cod...原创 2020-02-22 13:26:32 · 94 阅读 · 0 评论 -
【剑指offer】二叉树的下一个节点(JS实现)
题目描述:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:1.利用next指针找出树的根节点2.将中序遍历的结果存储在数组中3.找出所求节点的下一个节点/*function TreeLinkNode(x){ this.val = x; this.left = null; ...原创 2020-02-22 12:52:06 · 214 阅读 · 0 评论 -
【剑指offer】字符流中第一个不重复的字符(JS实现)
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路如下:标记字符流中字符出现的次数找出第一个出现次数为1的字符若使用数组,需要两个数组,分别标记字符出现的次数、字符的下标;而使用Map,可以一并解决这两个问题:...原创 2020-02-19 15:41:18 · 470 阅读 · 0 评论 -
【剑指offer】表示数值的字符串(JS实现)
题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。function isNumeric(s){ // write code here var reg = /^[\+-]?\...原创 2020-02-19 20:43:04 · 177 阅读 · 0 评论 -
【剑指offer】链表中环的入口节点(JS实现)
题目:思路:借鉴大佬的思路function EntryNodeOfLoop(pHead){ // write code here //至少3个节点才能成环 if(!pHead || !pHead.next || !pHead.next.next){ return null } //分别定义快慢指针 let fast = pH...原创 2020-02-20 14:57:31 · 215 阅读 · 0 评论