LeetCode
_Timer_
这个作者很懒,什么都没留下…
展开
-
297. 二叉树的序列化与反序列化
队列思路:序列化:层序遍历,并保留每个节点的左右子节点的状态:1.如果当前节点无子节点,后缀E2.如果当前节点只有左节点,后缀L3.如果当前节点只有右节点,后缀R4.如果当前节点有左右节点,后缀S图中序列为:1S 2E 3S 4E 5E反序列化:再次使用队列进行层序遍历,每次poll操作过后,根据后缀把对应的子节点加入队列。public class Codec { // Encodes a tree to a single string. p.原创 2021-06-21 22:29:21 · 75 阅读 · 0 评论 -
124. 二叉树中的最大路径和
问题:路径 被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。思路:递归只需要关注局部,所有可能的路径中都必有父节点,本质上遍历的时候就是求出当前这个点作为路径的父节点时,它的路径最大值。所以,在遍历到任意节点的时候,对这个节点而言,有如下几种情况:1.此节点可能为最大路径的根原创 2021-06-20 00:16:12 · 195 阅读 · 0 评论 -
215. 数组中的第K个最大元素
直接思路:排序后求第K大 优先队列遍历数组,保持Size<=k,队列peek()为K大元素。快排优化:优化1:快速排序不必排完全部,每次partition可以确认其中一个pivot的位置,pivot位置落在第K个的索引即可。这里注意手写快排原地操作的写法。最左的位置默认为pivot,所以遍历先从left+1开始遍历。j为[left+1,right]中小于pivot的所有元素的最右侧的值。当遍历的时候出现比pivot小的数的时候,则把j++,然后把比pivot小的数放到j的位置.原创 2021-06-18 00:23:46 · 73 阅读 · 0 评论