06 2021 档案
摘要:本文会从递归反转整个单链表开始拓展 递归反转整个链表 先直接看实现代码: ListNode reverse(ListNode head) { if (head.next == null) return head; ListNode last = reverse(head.next); head.ne
阅读全文
摘要:快速排序就是个二叉树的前序遍历,归并排序就是个二叉树的后序遍历 简单分析一下他们的算法思想和代码框架: 快速排序的逻辑是,若要对 nums[lo..hi] 进行排序,我们先找一个分界点 p,通过交换元素使得 nums[lo..p-1] 都小于等于 nums[p],且 nums[p+1..hi] 都大
阅读全文
摘要:二叉树的最近公共祖先 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 遇到任何递归型的问题,无非就是灵魂三问: 1、这个函数是干嘛的? 情况 1,如果p和q都在以root为根的树中,函数返回的即使p和q的最近公共祖先节点。 情况 2,那如果p和q都不在以root为根的树中怎么办呢?函数理所
阅读全文
摘要:前序遍历框架如下: void traverse(TreeNode root) { if (root == null) return; // 前序遍历的代码 traverse(root.left); traverse(root.right); } 后序遍历的代码框架: void traverse(Tr
阅读全文
摘要:原型模式 适用场景: 原型模式主要解决的问题就是创建重复对象,⽽而这部分 对象 内容本身⽐比较复杂,生成过程可能从库或者 RPC接口中获取数据的耗时较长,因此采⽤用克隆的方式节省时间。 原型模式主要解决的问题就是创建⼤大量量重复的类, 案例:实现一个上机考试抽题的服务,因此在这里建造一个题库题目的场
阅读全文
摘要:二叉搜索树的升序输出或者升序查找第k个元素之类的问题可以依靠中序遍历,BST 相关的问题,要么利用 BST 左小右大的特性提升算法效率,要么利用中序遍历的特性满足题目的要求 如果当前节点会对下面的子节点有整体影响,可以通过辅助函数增长参数列表,借助参数传递信息。 在二叉树递归框架之上,扩展出一套 B
阅读全文