
Tree
USC_ECE
这个作者很懒,什么都没留下…
展开
-
JZ26 二叉搜索树与双向链表
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-yu-shuang-xiang-lian-biao-lcof/solution/mian-shi-ti-36-er-cha-sou-suo-shu-yu-shuang-xian-5/采用中序遍历来做。需要注意的是牛客网不需要我们把头和尾相连接。代码如下:/**public class TreeNode { int val = 0; TreeNode left = null;原创 2020-09-06 22:09:59 · 374 阅读 · 0 评论 -
JZ24 二叉树中和为某一值的路径
https://leetcode-cn.com/problems/er-cha-shu-zhong-he-wei-mou-yi-zhi-de-lu-jing-lcof/solution/mian-shi-ti-34-er-cha-shu-zhong-he-wei-mou-yi-zh-5/代码如下:import java.util.ArrayList;/**public class TreeNode { int val = 0; TreeNode left = null;原创 2020-08-31 23:54:56 · 204 阅读 · 0 评论 -
JZ23 二叉搜索树的后序遍历序列
https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-hou-xu-bian-li-xu-lie-lcof/solution/mian-shi-ti-33-er-cha-sou-suo-shu-de-hou-xu-bian-6/代码如下:public class Solution { public boolean VerifySquenceOfBST(int [] sequence) { // Corner Case原创 2020-08-31 23:15:44 · 192 阅读 · 0 评论 -
JZ18 二叉树的镜像
/**public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; }}*/public class Solution { public void Mirror(TreeNode root) { // Base Case and.原创 2020-08-28 17:23:28 · 291 阅读 · 0 评论 -
JZ17 树的子结构
HasSubtree()函数:Corner Case判断:当Tree1和Tree2都不为null的时候才进行比较,否则直接返回false 判断必须以当前节点root1为根节点的Tree1是否包含Tree2,调用helper()函数按照先序遍历来检查每一个node 如果不包含,分别拿root1的左子节点和右子节点作为输入,再调用HasSubtree()自身helper()函数:如果Tree2已经遍历完了都能对应的上,返回true 如果Tree2还没有遍历完,Tree1却遍历完了,返回false原创 2020-08-28 17:11:53 · 1065 阅读 · 0 评论 -
LeetCode 437. Path Sum III
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2020-08-11 10:59:36 · 87 阅读 · 0 评论 -
LeetCode 113. Path Sum II
这道题用DFS解比较好,注意吃和吐成对出现,代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeN原创 2020-08-11 08:27:04 · 100 阅读 · 0 评论 -
LeetCode 112. Path Sum
这道题用recursive的方法比较简洁,代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNo原创 2020-08-11 07:52:12 · 116 阅读 · 0 评论 -
LeetCode 103. Binary Tree Zigzag Level Order Traversal
维护一个boolean变量odd,当odd == true时,将被expand的node的值插在list的末尾;否则插在list头部。每一层遍历完后,对odd进行取反操作。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * Tree原创 2020-06-27 14:15:27 · 90 阅读 · 0 评论 -
LeetCode 958. Check Completeness of a Binary Tree
一旦我们遇到气泡以后,就不可以再碰到任何数字。所以设置一个boolean变量flag,当遇到null时就设置成true,以后如果再遇到数字就return false。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNod原创 2020-06-27 13:20:32 · 111 阅读 · 0 评论 -
LeetCode 107. Binary Tree Level Order Traversal II
这道题和102题几乎一样,每层的结点在二维数组中存放的先后顺序不同,只需将最后存放位置每次都从0开始放就可以了。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; }..原创 2020-06-27 07:23:56 · 96 阅读 · 0 评论 -
LeetCode 102. Binary Tree Level Order Traversal
在每一层遍历开始前,先记录队列中的结点数量n(也就是这一层的结点数量),然后一口气处理完这一层的n个结点。注意Queue使用offer,List使用add方法。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNod...原创 2020-06-27 06:55:14 · 84 阅读 · 0 评论 -
LeetCode 285. Inorder Successor in BST
Approach 1 (Iterative)创建一个succ变量保存可能的successor。每次向右走的时候,更新succ为当前root;往左走的时候则保持不变。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } *原创 2020-06-26 10:00:53 · 134 阅读 · 0 评论 -
LeetCode 173. Binary Search Tree Iterator
Solution 1 (容易想到但是非最优解)注意访问List和Array不同,需要用get()方法,代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; }原创 2020-06-26 07:07:38 · 125 阅读 · 0 评论 -
LeetCode 222. Count Complete Tree Nodes
分别检查左右子树的高度left和right。如果left == right则说明左子树一定是满树,那么左子树加上根节点的node个数为2^left,我们再recursively计算右子树的节点就可以了。如果left > right = left - 1则说明右子树是满树,那么右子树加上根加点的node个数为2^right,我们再recursively计算左子树的节点就可以了。还有一个需要注意的点是移位运算符的优先级低于加法,所以需要加上小括号。代码如下:/** * Definition for原创 2020-06-25 06:04:08 · 100 阅读 · 0 评论 -
LeetCode 270. Closest Binary Search Tree Value
我们可以利用二分搜索树的特点 (左<根<右) 来快速定位,由于根节点是中间值,在往下遍历时,根据目标值和根节点的值大小关系来比较。如果节点值大于目标值,则应该找更小的值,于是到左子树去找,反之去右子树找。代码如下:/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * Tre原创 2020-06-24 11:20:05 · 212 阅读 · 0 评论 -
Leetcode 98. Validate Binary Search Tree
Solution 1对于树的每个节点 val ,设其上下边界 lower , upper。(用 long 防止 INT_MAX 溢出 ) 判断根结点时,须满足 lower < val < upper,否则返回 false 判断左节点时,仅 上界 变化 ( 新上界为 high 与 val 较小值。又因 val 必小于 high,故新上界为 val ) 判断右节点时,仅 下界 变化 ( 同理,新下界为 val )/** * Definition for a binary tree .原创 2020-06-22 13:15:47 · 103 阅读 · 0 评论 -
LeetCode 226. Invert Binary Tree
这道题的核心在于遍历节点,只要能接触到每一个节点,就能反转它的左右孩子,至于遍历方式反而不重要了,先序后序中序层次都一样,都可以用。前序 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.原创 2020-06-22 10:22:51 · 123 阅读 · 0 评论 -
LeetCode 572. Subtree of Another Tree
这道题和LeetCode 100. Same Tree关系密切。首先是Base Case:t 为 null 一定是 true t 不为 null时, 只要 s 为 null,肯定是 false然后就是判断下列三种情况之一是否成立:当前两棵树相等; t 是 s 的左子树; t 是 s 的右子树。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeN原创 2020-06-22 09:54:32 · 109 阅读 · 0 评论 -
LeetCode 100. Same Tree
Base Case:当两棵树的当前节点都为 null 时返回 true;当其中一个为 null 另一个不为 null 时返回 false;当两个都不为空但是值不相等时,返回 false;Recursive Rule:分别判断左子树和右子树是否相同;/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNod.原创 2020-06-22 08:53:54 · 69 阅读 · 0 评论 -
LeetCode 110. Balanced Binary Tree
Top-down recursion /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left,原创 2020-06-20 15:27:33 · 93 阅读 · 0 评论 -
LeetCode 101. Symmetric Tree
递归结束条件:都为空指针则返回 true只有一个为空则返回 false两个指针当前节点值不等则返回false递归过程:判断 A 的右子树与 B 的左子树是否对称判断 A 的左子树与 B 的右子树是否对称/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode原创 2020-06-20 15:08:14 · 77 阅读 · 0 评论 -
LeetCode 111. Minimum Depth of Binary Tree
很多人写出的代码都不符合 1,2 这个测试用例,是因为没搞清楚题意题目中说明:叶子节点是指没有子节点的节点,这句话的意思是 1 不是叶子节点题目问的是到叶子节点的最短距离,所以所有返回结果为 1 当然不是这个结果另外这道题的关键是搞清楚递归结束条件叶子节点的定义是左孩子和右孩子都为 null 时叫做叶子节点当 root 节点左右孩子都为空时,返回 1当 root 节点左右孩子有一个为空时,返回不为空的孩子节点的深度当 root 节点左右孩子都不为空时,返回左右孩子较小深度的节点值原创 2020-06-20 12:25:44 · 102 阅读 · 0 评论 -
LeetCode 145. Binary Tree Postorder Traversal
本题有iterative和recursive两种解法,recursive比较简单而iterative则需要一些小技巧~Iterative solution 思路:前序遍历的顺序是中左右,后序遍历的顺序是左右中,我们可以改进前序遍历的代码来实现中右左,然后再反转一下列表来得到想要的结果。此外我们这里声明为LinkedList,目的是可以通过使用addFirst()方法来避免reverse整个列表。 /** * Definition for a binary tree node. * public原创 2020-05-27 13:58:33 · 127 阅读 · 0 评论 -
Leetcode 94. Binary Tree Inorder Traversal
这道题有iterative和recursive两种解法,recursvie比iterative要简单一些。Iterative solution 递归实现时,是函数自己调用自己,一层层的嵌套下去,操作系统/虚拟机自动帮我们用栈来保存了每个调用的函数,现在我们需要自己模拟这样的调用过程。 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left;.原创 2020-05-27 12:02:49 · 122 阅读 · 0 评论 -
LeetCode 144. Binary Tree Preorder Traversal
同样是有iterative和recursive两种解法。这次recursive反而比iterative相对简单一些~Iterative solution /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val.原创 2020-05-25 15:56:41 · 118 阅读 · 0 评论 -
LeetCode 993. Cousins in Binary Tree
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = val; } * TreeNode(int val, TreeNode left, TreeNode right) { .原创 2020-05-24 09:52:40 · 141 阅读 · 0 评论