js数据结构
一枚小银子
这个作者很懒,什么都没留下…
展开
-
包含min函数的栈(js)
要能得到栈内最小元素,容易想到用一个变量来存这个元素,但问题是这个元素出去以后,下一个最小元素呢?解决该问题就得专门用一个数组来存第一小第二小第三小...的元素们了,定义两个数组,主数组arr1用来做栈的出栈和入栈,副数组arr2用来存小元素。定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的min函数在该栈中,调用min、push及pop的时间复杂度都是O(1)。由此,arr2中存的元素越往尾部越小,每次读尾部最后一个元素就是最小元素。...原创 2022-07-26 15:28:30 · 255 阅读 · 0 评论 -
两栈实现队列和两队列实现栈(js)
js中使用两栈实现队列和两队列实现栈原创 2022-07-14 16:23:02 · 305 阅读 · 0 评论 -
二叉树的前、中、后、层次非递归遍历(js)
有如下二叉树遍历:// 前序遍历, head-left-right function HLR (tree) { const stack = [], res = [] if (tree) stack.push(tree) while (stack.length) { const cur = stack.pop() res.push(cur.val) // 栈先入后出,所以.原创 2022-04-23 20:53:26 · 1168 阅读 · 2 评论 -
合并二叉树(js)
题目:力扣思路:树的合并看成节点的合并,注意节点为null的处理代码:var mergeTrees = function(root1, root2) { if (!root1 && !root2) return null return { val: (root1 ? root1.val : 0) + (root2 ? root2.val : 0), left: mergeTrees(root1 ? root1.left : nul原创 2022-03-29 00:40:52 · 559 阅读 · 0 评论 -
删除链表的倒数第 N 个结点(js)
题目:力扣思路:三个指针,最终要让p2指针指向尾节点,p1指针指向倒数第n个节点,p0指针指向p1的前一个节点,此时让p0的下一个为p1的下一个就完事了。操作:先让p2指针移动n个节点,此时p2与p1相差n,之后三个指针同时移动直到p2指针到了尾结点位置。代码:var removeNthFromEnd = function(head, n) { let res = new ListNode() res.next = head let p0 = res, p1 = res原创 2022-03-27 16:16:35 · 471 阅读 · 0 评论 -
两两交换链表中的节点(js)
题目:力扣思路:迭代,p1、p2分别指向要交换位置的左、右节点,连接,更新指针,具体看下面代码。代码:var swapPairs = function(head) { const res = new ListNode() res.next = head let temp = res while (temp.next && temp.next.next) { const p1 = temp.next, p2 = temp.next.原创 2022-03-24 23:27:53 · 732 阅读 · 0 评论 -
listToTree(js)
给出list:const list = [ {id: 0, val: 0, parentId: null}, {id: 1, val: 1, parentId: 0}, {id: 2, val: 2, parentId: 0}, {id: 3, val: 3, parentId: 1}, {id: 4, val: 4, parentId: 2}]将该list转变为树形结构:方法一:递归,依次找到每个节点的childrenfunction list原创 2022-03-22 20:39:12 · 1433 阅读 · 0 评论 -
二叉树的深度(js)
题目:力扣思路:深度优先遍历,用一个变量记录当前的最大深度代码:var maxDepth = function (root) { if (!root) return 0 let l = 0 function getMaxL(root, deep) { l = Math.max(l, deep) if (root.left) { getMaxL(root.left, d原创 2022-03-23 02:02:41 · 466 阅读 · 0 评论 -
重建二叉树(js)
题目:力扣思路:递归,通过重建节点的左子树和右子树,实现对整个二叉树的重建,抓住前序遍历是’根左右‘,中序遍历是’左根右‘的特性,更新需要传给函数的前序遍历和中序遍历。代码:var buildTree = function(preorder, inorder) { if (!preorder.length || !inorder.length) return null const root = preorder[0] const i = inorder.indexOf(原创 2022-03-24 03:35:14 · 303 阅读 · 0 评论