Tree
文章平均质量分 67
Dylan_Java_NYC
练很重要,总结更重要,感谢CSDN给了我这么好的平台交流。
展开
-
LeetCode Binary Tree Zigzag Level Order Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-zigzag-level-order-traversal/ 这道题是BFS的变形,与Binary Tree Level Order Traversal相似。但是要求偶数行从左到右,奇数行从右到左。 这种顺序正反交替可以用两个stack来实现。一个用来读取,一个用来存储下一层节点。 Time O原创 2015-08-21 07:48:21 · 303 阅读 · 0 评论 -
LeetCode Unique Binary Search Trees II
原题链接在这里:https://leetcode.com/problems/unique-binary-search-trees-ii/ 这道题是Unique Binary Search Trees的进阶版本. 返回的不是个数,而是每一个结果。 循环中递归调用helper函数求解子问题,以i为root时,BST的left child 是由1到i-1生成的,BST的right child 是由i原创 2015-09-11 03:11:21 · 287 阅读 · 0 评论 -
LeetCode Unique Binary Search Trees
原题链接在这里:https://leetcode.com/problems/unique-binary-search-trees/ 对于选取的点,它的返回值应该是它的不同左子树的个数*他的不同右子树的个数。 边界调节,当n=0时,返回1,只返回一个空树,当n=1时,返回1,只有一个节点的树。 AC Java: public class Solution { public int n原创 2015-09-11 02:21:45 · 368 阅读 · 0 评论 -
LeetCode Binary Tree Maximum Path Sum
原题链接在这里:https://leetcode.com/problems/binary-tree-maximum-path-sum/ maxVal中包含着最后要返回的结果。 helper函数是求当前root往下的最大路径,先算左边路径,返回值直接和0比较,若不是正数就返回0,然后同样方法算右边路径。 当前最深路径看当前root的val加上左边或者右边,哪个大,helper函数返回大的那个。原创 2015-09-11 07:09:34 · 293 阅读 · 0 评论 -
LeetCode Maximum Depth of Binary Tree
原题链接在这里:https://leetcode.com/problems/maximum-depth-of-binary-tree/ 求左右最大深度recursively, 比较出最大的再加一,终止条件是root == null, 返回0. 进阶题目是Balanced Binary Tree. AC Java: /** * Definition for a binary tree no原创 2015-09-05 00:49:42 · 293 阅读 · 0 评论 -
LeetCode Balanced Binary Tree
原题链接在这里:https://leetcode.com/problems/balanced-binary-tree/ 用递归方法求最大深度,如果左右最大深度相差大于一,则返回-1,若是已有左或者右的返回值为-1,则立即返回-1. 最后看返回到root时是否为一个负数,若是负数则不是balanced,若是正数,则返回了最大深度,是balanced. AC Java: /** * Defi原创 2015-09-05 00:44:43 · 306 阅读 · 0 评论 -
LeetCode Symmetric Tree
原题链接在这里:https://leetcode.com/problems/symmetric-tree/ 本题与Same Tree类似。这里比较是否symmetric,也是用recursion,需要写一个helper,递归调用,不过每次对称着比较。 终止条件:同为null, return true; one is null, the other is not, return false; 同原创 2015-09-05 02:06:52 · 269 阅读 · 0 评论 -
LeetCode Construct Binary Tree from Preorder and Inorder Traversal
原题链接在这里:https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 利用preorder 和 inorder来构造树。 e.g. preorder 1, 2, 4, 5, 3, 6, 7 inorder 4, 2, 5, 1, 6, 3, 7 先原创 2015-08-21 02:33:55 · 426 阅读 · 0 评论 -
LeetCode Binary Tree Inorder Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-inorder-traversal/# 本题与Binary Tree Preorder Traversal相呼应。可以分别采用Recursion, Iteration 和 Morris Traversal 三种方法。 Method 1: Recursion Recursio原创 2015-08-20 02:48:01 · 295 阅读 · 0 评论 -
LeetCode Binary Tree Preorder Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-preorder-traversal/ 虽然原题要求不让用recursion,但还是试了一下。一试发现自己的recursion真心无语。 Method 1 是Recursion,学到的新方法就是若是要在recursion中维护一个生成的变量,可以再造一个函数,然后把这个要维护的变量当成argum原创 2015-08-19 09:15:12 · 480 阅读 · 0 评论 -
LeetCode Validate Binary Search Tree
原题链接在这里:https://leetcode.com/problems/validate-binary-search-tree/ 根据BST特性递归调用原函数,如果出现root.val > max 或者root.val 本来这道题并不难,但加上了边界处理就太让人无语了。 Note: 1. min, max 需用long型,如果不用long, 会有 [-2147483648,-21474原创 2015-09-10 23:05:07 · 335 阅读 · 0 评论 -
LeetCode Binary Search Tree Iterator
原题链接在这里:https://leetcode.com/problems/binary-search-tree-iterator/ AC Java: /** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode rig原创 2015-09-11 06:07:29 · 294 阅读 · 0 评论 -
LeetCode Invert Binary Tree
原题链接在这里:https://leetcode.com/problems/invert-binary-tree/ 树的问题多为recursion. 从上到下一层一层交换左右。 Time O(n), Space O(logn). Note: 原函数返回TreeNode, 可以来一个helper返回void来辅助recursion. 若是不想要返回值,单纯想改变原结构时可以用这种建一个返回vo原创 2015-09-05 02:27:44 · 349 阅读 · 0 评论 -
LeetCode Binary Tree Paths
原题链接在这里:https://leetcode.com/problems/binary-tree-paths/ DFS 依次添加,终止条件是叶子节点。 Note: 1. 如果使用StringBuilder, 在递归调用时,必须写成new StringBuilder(sb). 否则会报错. e.g. [1,2,3], 会写成["1->2","1->23"]. 2 . 但如果使用String原创 2015-09-06 12:53:47 · 390 阅读 · 1 评论 -
LeetCode Path Sum II
原题链接在这里:https://leetcode.com/problems/path-sum-ii/ 递归调用,终止条件是当遇到叶子节点时判断sum是否为0,则res加当前ls. 若root.left 不为空,则ls.add(root.left.val)然后递归调用helper, 用完后要remove掉尾节点。右侧相同。 Note: 1. 当res加 ls时一定要res.add(new Arr原创 2015-09-07 04:14:33 · 303 阅读 · 0 评论 -
LeetCode Construct Binary Tree from Inorder and Postorder Traversal
原题链接在这里:https://leetcode.com/problems/construct-binary-tree-from-inorder-and-postorder-traversal/ 这道题与Construct Binary Tree from Preorder and Inorder Traversal 思路相似,不同之处在于这里的root在postorder的最有一位,其他都相同原创 2015-08-21 03:03:10 · 354 阅读 · 0 评论 -
LeetCode Same Tree
原题链接在这里:https://leetcode.com/problems/same-tree/ 树的题目多用递归可以简单地写出来。 终止条件:若左右都为空就return true; 若一个为空另一个不为空 return false; 最后两个都不为空时,值不同return false. Time O(n), Space O(logn). Note: 1. 左右都不为空,值相同时继续rec原创 2015-09-05 01:24:37 · 281 阅读 · 0 评论 -
LeetCode Binary Tree Postorder Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-postorder-traversal/ 与Binary Tree Preorder Traversal 和 Binary Tree Inorder Traversal 类似。 Method 1: Recursion Time O(n), Space O(logn) /** * De原创 2015-08-20 08:01:01 · 321 阅读 · 0 评论 -
LeetCode Convert Sorted Array to Binary Search Tree
原题链接在这里:https://leetcode.com/problems/convert-sorted-array-to-binary-search-tree/ 本题与Convert Sorted List to Binary Search Tree相似,不同就是这个argument是array. 所以为了方便记左右index来做递归,就建一个有多个argument的函数。这也是array原创 2015-09-03 04:04:11 · 276 阅读 · 0 评论 -
LeetCode Convert Sorted List to Binary Search Tree
原题链接在这里:https://leetcode.com/problems/convert-sorted-list-to-binary-search-tree/ 找到中点当BST的root,如此递归调用,知道只有一个点时返回由当前点生成的TreeNode,以此设为终止条件。 Note: 1. 此处midList找到的是中点的前一个点,然后拆成三段,中点前一段,中点单独一个,中点后一段。 2.原创 2015-09-03 03:36:29 · 385 阅读 · 0 评论 -
LeetCode Binary Tree Level Order Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-level-order-traversal/ 是一道BFS,利用queue,先进先出,并利用preCount来判断是否走完了当前一层。当preCount = 0 时表示当前一层走完,要把当前list加入res里,再刷新list,问题是不要忘记同时刷新preCount. Time O(n), Sp原创 2015-08-21 06:54:30 · 353 阅读 · 0 评论 -
LeetCode Populating Next Right Pointers in Each Node II
原题链接在这里:https://leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/ 本题是Populating Next Right Pointers in Each Node的进阶版。关键是在有null的时候如何找到下一节点,通过while loop找到next节点,while loop 很关键。 N原创 2015-09-10 04:52:12 · 516 阅读 · 0 评论 -
LeetCode Populating Next Right Pointers in Each Node
原题链接在这里:https://leetcode.com/problems/populating-next-right-pointers-in-each-node/ 递归调用,如果root.next不为null, root.right.next借助于root.next.left, 然后root.left.next指向root.right. 若是算上递归,Space O(logn). AC J原创 2015-09-10 02:48:41 · 382 阅读 · 0 评论 -
LeetCode Kth Smallest Element in a BST
原题链接在这里:https://leetcode.com/problems/kth-smallest-element-in-a-bst/ Method 1: BST 用in-order遍历出来的就是由小到大,Method1用recursion,会出来一整个list, 然后返回list.get(k-1)即可。 AC Java: /** * Definition for a binary tr原创 2015-09-09 09:08:29 · 272 阅读 · 0 评论 -
LeetCode Count Complete Tree Nodes
原题链接在这里:https://leetcode.com/problems/count-complete-tree-nodes/ 递归调用函数,终止条件两个,一个是root == null, return 0, 一个是左右高度相同说明是满树,return 2^height-1。 若是左右高度不同,递归调用求左子树包含Node数+右子树包含Node数+1(自身)。 Note: 1. 用Math原创 2015-09-09 00:48:15 · 317 阅读 · 0 评论 -
LeetCode Flatten Binary Tree to Linked List
原题链接在这里:https://leetcode.com/problems/flatten-binary-tree-to-linked-list/ Method 1: 前序遍历,都加到List里,最后从List加到树里。Time O(n), Space O(n). Method 2: 在做Pre-order时更改树的结构,使用stack特性,每次出栈时加到lastVisit的右子点,同时更新l原创 2015-09-09 08:03:42 · 266 阅读 · 0 评论 -
LeetCode Binary Tree Right Side View
原题链接在这里:https://leetcode.com/problems/binary-tree-right-side-view/ 与Binary Tree Level Order Traversal相似,通过BFS一层一层扫树,这里是仅添加最右面的一个点,就是curCount = 1 的时候。 Note: 当curCount == 0 时,curCount = nextCount, 不原创 2015-09-10 02:16:10 · 254 阅读 · 0 评论 -
LeetCode Recover Binary Search Tree
原题链接在这里:https://leetcode.com/problems/recover-binary-search-tree/ 采用inorder遍历BST应该是返回从小到大的顺序,但这里有两个点顺序错了,所以不会完全从小到大。 如果两个相邻点顺序错了,inorder就应该有一个地方大小顺序颠倒,如果不是相邻点顺序错了,inorder应有两个地方大小顺序颠倒。 e.g. 1234567,原创 2015-09-10 07:04:09 · 377 阅读 · 0 评论 -
LeetCode Lowest Common Ancestor of a Binary Tree
原题链接在这里:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ 是Lowest Common Ancestor of a Binary Search Tree的进阶题目。无法比较大小,但是可以看p,q是不是在root的两边,若在两边,则返回root. 若都在一边,就在那一边继续。 Note: 1.原创 2015-09-05 05:11:20 · 321 阅读 · 0 评论 -
LeetCode Minimum Depth of Binary Tree
原题链接在这里:https://leetcode.com/problems/minimum-depth-of-binary-tree/ 本题与Maximum Depth of Binary Tree相似,不同是需要判断叶子节点,若是给出[1,2]这种情况,返回值应该是2而不是1,root的右节点为空,而根据定义:The minimum depth is the number of nod原创 2015-09-05 01:07:36 · 249 阅读 · 0 评论 -
LeetCode Binary Tree Level Order Traversal II
原题链接在这里:https://leetcode.com/problems/binary-tree-level-order-traversal-ii/ 与Binary Tree Level Order Traversal相似,只是返过来加链表。自然想到多用一个stack即可。像BFS用queue一层一层扫,出queue时添加到list里,用curCount计数,为0时表示当前level走完,li原创 2015-09-05 01:47:27 · 268 阅读 · 0 评论 -
LeetCode Lowest Common Ancestor of a Binary Search Tree
原题链接在这里:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 递归调用,如果p, q的值都小于root.val就在root.left中继续找,如果p, q的值都大于root.val就在root.right中继续找。 只有当root的val在p, q的val中间包括p, q的val时,返原创 2015-09-05 04:52:07 · 253 阅读 · 0 评论 -
LeetCode Sum Root to Leaf Numbers
原题链接在这里:https://leetcode.com/problems/sum-root-to-leaf-numbers/ 本题与Path Sum II相似,都是递归调用。终止条件都是左右child都是空,否则cur*10加child.val, 递归调用函数,再去掉尾节点。 Note: 1. helper 是pass by value, 所以res一定要用个array存储。 2. 递原创 2015-09-07 22:29:32 · 288 阅读 · 0 评论