大家好,我是编程熊. 往期我们一起学习了<线性表>相关知识. 本期我们一起学习二叉树,二叉树的问题,大多以递归为基础,根据题目的要求,在递归过程中记录关键信息,进而解决问题. 如果还未学习递归的同学,编程熊后续会讲解递归,建议学习递归后再来做二叉树相关题目,但并不影响学习二叉树基础知识部分. 本文将从以下几个方面展开,学习完可以解决面试常见的二叉树问题. 二叉树概述和定义 顾名思义,二叉树的每个节点最多有两个子节点,下图展示了常见的二叉树. 二叉树的定义方式 二叉树是由许多节点组成,节点有数据…
大家好,我是编程熊,双非逆袭选手,字节跳动.旷视科技前员工,ACM金牌,保研985,<ACM金牌选手讲解LeetCode算法系列>作者. 上一篇文章讲解了<线性表>中的数组.链表.栈和队列的概念和基本应用,本文讲解栈和队列的高级应用. 单调栈 双端队列 滑动窗口 单调栈 介绍 单调栈 = 单调 + 栈,因此其同时满足两个特性: 单调性.栈的特点. 单调性: 单调栈里面所存放的数据是有序的(单调递增或递减). 栈: 后进先出. 因其满足单调性和每个数字只会入栈一次,所以可以在时间复杂…
大家好,我是编程熊. 往期文章介绍了<线性表>中的数组.链表.栈.队列,以及单调栈和滑动窗口. ACM金牌选手讲解LeetCode算法<线性表> ACM金牌选手讲解LeetCode算法<栈和队列的高级应用> 本期我们学习哈希,其主要作用是加速我们查找数据的速度. 文章将从以下几个方面展开,内容通俗易懂. 若不想了解哈希原理,直接使用哈希表刷题的话,可以直接下拉到"常见的哈希结构"部分. 哈希概述 哈希表又称散列表,表现形式为将任意长度的输入,通过哈希…
上周通过一位小伙伴,加入了一个氛围很好的小群,人不多,但是大家保持着对知识的渴望,让我很感动. 我自己也有一个群,人数也不多,但是能真正互动起来一起学习,一起进步的,还是太少.所以,现在也在学习如何让自己成为更好的群主,带动群活跃,带动一个社群活跃,带动小伙伴们一起进步,是我的愿景.当然,也不否认现在很多群友正在朝着积极向上的方向走着,我要做的,也是时刻保持对知识的渴望,做到"持续学习". 谁让咱是一名优秀的程序员呢.上周日也学习了一遍递归,还通过一个二叉树的例子来简单介绍了下.我之前…
leetcode算法: Find Bottom Left Tree ValueGiven a binary tree, find the leftmost value in the last row of the tree.Example 1:Input: 2 / \ 1 3Output:1Example 2: Input: 1 / \ 2 3 / / \ 4 5 6 / 7Output:7Note: You may assume the tree (i.e., the given root n…
这是悦乐书的第314次更新,第335篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第183题(顺位题号是783).给定具有根节点值的二叉搜索树(BST),返回树中任何两个不同节点的值之间的最小差值.示例: 给定的树[4,2,6,1,3,null,null]由下图表示: 4 / \ 2 6 / \ 1 3 输出:1 说明:请注意,root是TreeNode对象,而不是数组.该树中的任意节点最小差值为1,它发生在节点1和节点2之间,也发生在节点3和节点2之间. 注意:…
这是悦乐书的第310次更新,第331篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第179题(顺位题号是754).你站在无限数字线的0号位置.在目的地有个target.在每次移动中,您可以向左或向右移动.在第n次移动(从1开始)期间,你可以走n步.返回到达目的地所需的最少步骤数.例如: 输入:target = 3 输出:2 说明:在第一步中,我们从0步进到1.在第二步,我们从1步骤到3. 输入:target = 2 输出:3 说明:在第一步中,我们从0步进到1.在第…
这是悦乐书的第295次更新,第314篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700).给定一个二叉搜索树(BST)的和正整数val. 你需要在BST中找到节点的值等于给定val的节点.返回以该节点为根的子树.如果此节点不存在,则应返回null.例如: 鉴于树: 4 / \ 2 7 / \ 1 3 以及搜索的价值val:2 你应该返回这个子树: 2 / \ 1 3 在上面的示例中,如果我们要搜索值5,因为没有值为5的节点,我们应该返回nul…
这是悦乐书的第290次更新,第308篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第158题(顺位题号是687).给定二叉树,找到路径中每个节点具有相同值的最长路径的长度.此路径可能会也可能不会通过根目录.例如: 输入: 5 / \ 4 5 / \ \ 1 1 5 输出:路径为[5,5,5],边长为2 输入: 1 / \ 4 5 / \ \ 4 4 5 输出:路径为[4,4,4],边长为2 注意: 两个节点之间的路径长度由它们之间的边数表示. 给定的二叉树不超过10…
这是悦乐书的第285次更新,第302篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第153题(顺位题号是671).给定非空的特殊二叉树,其由具有非负值的节点组成,其中该树中的每个节点具有恰好两个或零个子节点. 如果节点具有两个子节点,则该节点的值是其两个子节点中的较小值.给定这样的二叉树,您需要输出由整个树中所有节点的值组成的集合中的第二个最小值.如果不存在这样的第二个最小值,则输出-1.例如: 2 / \ 2 5 / \ 5 7 输出:5 2 / \ 2 2 输出…