![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tree
我要上岸!!!
这个作者很懒,什么都没留下…
展开
-
Leetcode 113 Path Sum II
Leetcode 113 Path Sum II 思路 思路:首先对树进行前序遍历,在遍历的同时将路径、路径和都记录下来,然后在叶子节点的地方进行判断当前路径和与要求是否匹配,若匹配则将当前路径添加到list中。在一个节点遍历完了之后,需要将当前节点从临时路径tmp中删除。 复杂度分析 时间复杂度O(n) 空间复杂度O(n) 代码 class Solution { public List&...原创 2019-02-15 05:03:24 · 112 阅读 · 0 评论 -
LeetCode 102 Binary Tree Level Order Traversal
思路 BFS,但是需要每次将下一层所有节点都放入queue中 复杂度 时间复杂度O(n) 空间复杂度O(n) 代码 /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(in...原创 2019-06-24 10:32:44 · 49 阅读 · 0 评论 -
LeetCode 285 / LintCode 448 Inorder Successor in BST
思路 思路1: 直接递归寻找后继,不考虑BST的性质,当作一般的二叉树来考虑。用递归很容易实现。 时间复杂度O(n),空间复杂度O(log n)(递归栈) 思路2:考虑BST的性质,类似二分的思想(为了O(h)的复杂度)。每次将p与root的值进行对比:(1)p>=root, 则搜索右子树; (2)p<root, 则搜索左子树,后继存在两种可能性:root或者左子树中的某个节点。如果...原创 2019-05-13 13:25:49 · 186 阅读 · 0 评论 -
LeetCode 538 (LintCode 661) Convert BST to Greater Tree
思路 “反中根“遍历。从BST的最右节点开始遍历,然后记录当前的节点和,后面的每个节点只要加上这个和即可;在原树上修改。 将中根遍历的left和right访问顺序反过来,使用一个全局变量sum记录当前的和。整体思路类似分治算法。 代码 /** * Definition of TreeNode: * public class TreeNode { * public int val; ...原创 2019-05-11 14:22:28 · 70 阅读 · 0 评论 -
LeetCode 366 (LintCode 650) Find Leaves of Binary Tree
思路 类似与求树的高度(分治)。在每次求得当前节点的高度后,使用hashmap将结果保存下来(key=高度,value=一个list,存的是高度=key的所有节点的value)。由于使用分治法递归求树的高度的过程中,已经将每个节点的高度都求了一遍,所以在每次求得高度后将高度与节点值直接存到hashmap中,就不用对每一个节点进行一遍dfs了,保证时间复杂度为线性。 代码 /** * Defini...原创 2019-05-16 05:22:50 · 356 阅读 · 0 评论 -
LeetCode 156 / LintCode 649 Binary Tree Upside Down
思路 根据题目中给出的树的要求:右节点要么为空,要么与左节点同时存在并且此时的右节点为叶子节点。 因此,本题要做的就是修改每个左节点的指向(除了原来的root)。由于本题中的树存在上面的性质,所以只需要修改左节点即可。递归搜索后修改指向即可。 【需要注意的是:为了保证原来的root与left和right之间在修改之后不会形成环,要加上root.left=null, root.right=null;...原创 2019-05-15 15:32:44 · 229 阅读 · 0 评论 -
LintCode 481 Binary Tree Leaf Sum
思路 一道巨简单的题目,单纯想练习一下递归。 复杂度 时间复杂度O(n) 空间复杂度最坏情况O(n) 代码 /** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int va...原创 2019-03-17 13:37:11 · 148 阅读 · 0 评论 -
LeetCode 101 Symmetric Tree
思路 corner case:假设根节点为null,也是true的 首先判断左右子树的根节点是否值相等,若相等:需要left.left == right.right && left.right == right.left 才能为镜像树,否则为false。 复杂度 时间复杂度O(n), 空间复杂度O(n)[最坏情况为一条线] 代码 递归实现 class Solution { ...原创 2019-03-17 09:50:00 · 86 阅读 · 0 评论 -
Leetcode 314 Binary Tree Vertical Order Traversal
思路 利用horizontal distance(下面简称hd)来解。根节点为0,left child = 0-1,right child = 0+1,以此类推。对树进行bfs,根据hd为key将所有hd相同的节点存到一个list中作为value,然后根据hd从小到大依次输出即可。 关于horizontal distance 见https://www.youtube.com/watch?v=V7a...原创 2019-03-12 14:31:42 · 240 阅读 · 0 评论 -
LeetCode 235 Lowest Common Ancestor of a Binary Search Tree
思路 由于是BST,思路相比与236题有所简化。 只需要判断2个目标是否都在同一分支即可。 递归实现 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int...原创 2019-03-16 16:14:55 · 81 阅读 · 0 评论 -
Leetcode 230 Kth Smallest Element in a BST
思路 由于bst的中序遍历可以得到一个升序的序列,因此对bst进行中序遍历并记录已经遍历过的数字,当遍历过count==k-1时(count初始为0),说明现在正在遍历的是第k小的数字,保存起来等到最后返回即可。 小技巧 需要注意的是在java的值传递方式,将count和result放到数组中可以随着递归改变值 代码 /** * Definition for a binary tree node...原创 2019-03-12 05:58:12 · 69 阅读 · 0 评论 -
LeetCode 104 Maximum Depth of Binary Tree
思路 分治算法。与求树的高度的写法基本一样。 代码 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */...原创 2019-03-14 14:51:46 · 58 阅读 · 0 评论 -
LeetCode 297 Serialize and Deserialize Binary Tree
思路 Serialize:用arraylist代替queue进行bfs,使用index来完成,把所有节点加入一个arraylist,然后再统一转成字符串(StringBuilder)。注意需要在把所有节点加入arraylist后,进行从后往前的删除null值。 Deserialize: 同样使用一个arraylist,使用一个index来标记当前根节点,同时使用isLeftChild标记当前应该生...原创 2019-07-07 02:24:16 · 112 阅读 · 0 评论