9月27号leetcode每日一题

原题链接:填充右侧节点

思考过程

     说实话这道题做的蛮差的,或者是我现在在写思路的时候心情有点不大好,午睡没睡好,头有点晕。普通的BFS当然没什么问题,但是不满足常数空间的要求,不过这道题出的要求也不是特别严谨,递归所产生的空间不算到空间复杂度里面,这本身就有点扯。
     这道题思路还是借鉴官方题解之后才写出来的,其实还是层序遍历的板子,大概就是一行从左到右,在遍历这一行的时候将下一行的节点的next都连接起来了。然后使用一个nextstart来存储下一行开始的节点。
     不过感觉这道题的本质还是在考察BFS,递归产生的空间不算就当个笑话好了。

阅读更多

9月27号leetcode每日一题

原题链接: 二叉搜索树的最近公共祖先

思考过程

     刚开始还没有看到二叉搜索树这个条件,就按照普通二叉树去做的,但是其实仔细考虑二叉搜索树这个条件其实很好写递归,因为祖先节点的值肯定在目标两节点的中间,如果当前遍历节点的值在两个目标节点值的中间就一定是那个公共节点,这是因为这种情况下,p,q两个节点分布在左右子树,所以寻找的节点必然是root节点。
     如果不是分别在两棵子树上,然就是两个节点都在左边或者都在右边,所以此时root->val会同时大于或者同时小于两个节点的值。,按照这个去写递归即可。

阅读更多

9月26日leetcode每日一题

原题链接: 路径总和II

思考过程

     这道题之前也写过了,思维量也不大,使用简单dfs就可以解决。大致方法就是从根节点开始递归,然后对于非空的子节点进行递归,递归边界条件为遍历当前节点左右子节点均为空。仔细想了一下好像其他也没有什么要注意的点,另外就是root可能为空,所以要考虑一下cornerc case。

阅读更多

9月24日leetcode每日一题

原题链接: 二叉树中的众数

思考过程

     其实这种题目还蛮恶心的,因为虽然标注的难度是简单,但是往往还有进阶做法,像O(n)时间,O(1)空间这种。像今天这个就属于之前没学过就没法做的那种,题解采用的是Morris遍历以达到O(1)的时间复杂度。

阅读更多

leetcode_0922

原题链接: 监控二叉树

思考过程

     本题目和打家劫舍拿到题目很像,大致就是到每个节点会分不同的情况,比如说本道题中就是是否在该节点安装监控,打家劫舍则是是否在那个节点进行盗窃,每个节点的情况依赖于子节点的状态。

阅读更多

leetcode_0919

原题链接: 左叶子之和

思考过程

     树本身就是一个与递归概念联系紧密的数据结构,所以一般遇到这种问题都可以用递归的方法来解决,不过刚开始没有理清题意,还以为求的是最左边的子节点,结果WA了两次。明白了题意之后在普通dfs之上添加一个参数用于标识是左子节点还是右子节点即可。

阅读更多