leetcode刷题实录
我要成为罗宾姐姐
仿生人会梦见他养的电子豚鼠吗?
展开
-
leetcode297 二叉树的序列化与反序列化
题目链接:leetcode 297. 二叉树的序列化与反序列化本题思路:所谓序列化,就是把树结构变成链状结构,也就是在考察二叉树的遍历方式/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */public c原创 2021-02-25 20:23:37 · 62 阅读 · 0 评论 -
leetcode98 验证二叉搜索树
题目链接:leetcode 98. 验证二叉搜索树本题思路:根据 BST 的定义,root的整个左子树都要小于root.val,整个右子树都要大于root.val。问题是,对于某一个节点root,他只能管得了自己的左右子节点,怎么把root的约束传递给左右子树呢?通过使用辅助函数isValidBST(TreeNode root, TreeNode min, TreeNode max)增加函数参数列表,在参数中携带额外信息,将这种约束传递给子树的所有节点。class Solution {原创 2021-02-25 17:02:28 · 73 阅读 · 0 评论 -
leetcode875 爱吃香蕉的珂珂
题目链接:leetcode 875. 爱吃香蕉的珂珂解题基础:二分查找的注意事项本题思路:class Solution { public int minEatingSpeed(int[] piles, int H) { // 求最小速度 转化为求左侧边界的二分查找 int left = 1; // 相当于nums.length 区别于nums.length - 1(刚好下标不越界) int right = getMax(pil原创 2021-02-25 16:31:45 · 85 阅读 · 0 评论 -
leetcode1011 在 D 天内送达包裹的能力
题目链接:leetcode1011 在 D 天内送达包裹的能力解题基础:二分查找的注意事项本题思路:class Solution { public int shipWithinDays(int[] weights, int D) { // 装载的重量不会超过船的最大运载重量 int left = getMax(weights); // 相当于nums.length 区别于nums.length - 1(刚好下标不越界) int原创 2021-02-25 16:20:45 · 85 阅读 · 0 评论 -
leetcode 700 & 701 & 450 BST 的查、增、删
labuladong题目链接:leetcode 700. 二叉搜索树中的搜索本题思路:class Solution { public TreeNode searchBST(TreeNode root, int val) { if(root == null) return null; if(root.val == val) return root; else if(val > root.val) return.原创 2021-02-15 17:10:19 · 73 阅读 · 0 评论 -
leetcode230 二叉搜索树中第K小的元素 & 538 把二叉搜索树转换为累加树
labuladong解题基础:二叉搜索树(Binary Search Tree)特性:对于 BST 的每一个节点 node,左子树节点的值都比 node 的值要小,右子树节点的值都比 node 的值大对于 BST 的每一个节点 node,它的左侧子树和右侧子树都是 BSTBST 的中序遍历结果是升序的题目链接:leetcode230 二叉搜索树中第K小的元素本题思路:/** * Definition for a binary tree node. * public class .原创 2021-02-15 16:50:48 · 59 阅读 · 0 评论 -
leetcode652 寻找重复的子树
labuladong如何判断我们应该用前序还是中序还是后序遍历的框架?还是那句话,根据题意,思考一个二叉树节点需要做什么,到底用什么遍历顺序就清楚了。题目链接:leetcode652 寻找重复的子树本题思路:如果你想知道以自己为根的子树是不是重复的,是否应该被加入结果列表中,你需要知道什么信息?你需要知道以下两点:1、以我为根的这棵二叉树(子树)长啥样?使用「后序遍历」框架,通过拼接字符串把二叉树序列化2、以其他节点为根的子树都长啥样?借助HashMap,存每个节点的子树的序列化结果以.原创 2021-02-15 14:48:30 · 127 阅读 · 0 评论 -
leetcode106 从中序与后序遍历序列构造二叉树
labuladong写树的算法,关键思路如下:把题目的要求细化,搞清楚根节点应该做什么,然后剩下的事情抛给前/中/后序的遍历框架就行了,我们千万不要跳进递归的细节里,你的脑袋才能压几个栈呀。题目链接:leetcode106 从中序与后序遍历序列构造二叉树本题思路:函数签名如下:TreeNode buildTree(int[] inorder, int[] postorder);首先思考,根节点应该做什么。确定根节点的值,把根节点做出来,然后递归构造左右子树即可。postorder最后.原创 2021-01-09 19:12:48 · 77 阅读 · 0 评论 -
leetcode105 从前序与中序遍历序列构造二叉树
labuladong写树的算法,关键思路如下:把题目的要求细化,搞清楚根节点应该做什么,然后剩下的事情抛给前/中/后序的遍历框架就行了,我们千万不要跳进递归的细节里,你的脑袋才能压几个栈呀。题目链接:leetcode105 从前序与中序遍历序列构造二叉树本题思路:函数签名如下:TreeNode buildTree(int[] preorder, int[] inorder);首先思考,根节点应该做什么。确定根节点的值,把根节点做出来,然后递归构造左右子树即可。preorder第一个元.原创 2021-01-09 19:08:02 · 118 阅读 · 0 评论 -
leetcode654 最大二叉树
labuladong写树的算法,关键思路如下:把题目的要求细化,搞清楚根节点应该做什么,然后剩下的事情抛给前/中/后序的遍历框架就行了,我们千万不要跳进递归的细节里,你的脑袋才能压几个栈呀。题目链接:leetcode654 最大二叉树解题基础:Integer.MAX_VALUE/Integer.MIN_VALUE的用法:在一堆数字里找最大值和最小值的简单方法本题思路:函数签名如下:TreeNode constructMaximumBinaryTree(int[] nums);按照我.原创 2021-01-09 13:32:30 · 126 阅读 · 0 评论 -
leetcode114 二叉树展开为链表
labuladong写二叉树的算法题,都是基于递归框架的,我们先要搞清楚 root 节点它自己要做什么,然后根据题目要求选择使用前序,中序,后续的递归框架。二叉树题目的难点在于如何通过题目的要求思考出每一个节点需要做什么,这个只能通过多刷题进行练习了。题目链接:leetcode114 二叉树展开为链表本题思路:函数签名如下:void flatten(TreeNode root);我们尝试给出这个函数的定义:给 flatten 函数输入一个节点 root,那么以 root 为根的二叉树.原创 2021-01-07 07:33:07 · 200 阅读 · 0 评论 -
leetcode116 填充每个节点的下一个右侧节点指针
labuladong写树的算法,关键思路如下:把题目的要求细化,搞清楚根节点应该做什么,然后剩下的事情抛给前/中/后序的遍历框架就行了,我们千万不要跳进递归的细节里。题目链接:leetcode116 填充每个节点的下一个右侧节点指针解题基础:完满二叉树 vs 完全二叉树 vs 完美二叉树本题思路:题目的意思就是把二叉树的每一层节点都用 next 指针连接起来。把每一层的节点穿起来,只要把每个节点的左右子节点都穿起来就行了。初代框架Node connect(Node root) {.原创 2021-01-06 07:09:52 · 86 阅读 · 0 评论 -
leetcode226 翻转二叉树
leetcode226 翻转二叉树二叉树题目的一个难点就是,如何把题目的要求细化成每个节点需要做的事情。写树相关的算法,简单说就是,先搞清楚当前 root 节点该做什么,然后根据函数定义递归调用子节点,递归调用会让孩子节点做相同的事情。本题:只要把二叉树上的每一个节点的左右子节点进行交换,最后的结果就是完全翻转之后的二叉树。Java版/** * Definition for a binary tree node. * public class TreeNode { * int原创 2020-12-24 23:55:56 · 127 阅读 · 0 评论