
二叉树(Binary Tree)
文章平均质量分 79
CP Coding
这个作者很懒,什么都没留下…
展开
-
LeetCode 1339. Maximum Product of Splitted Binary Tree - 亚马逊高频题25
由于移除树中的任意一条边都将变成两棵子树,因此最直观的做法就是移除每条边算出两棵子树的和,再计算它们的乘积,从中找出乘积最大值。但是每移除一条边再计算两棵子树和,将有很大计算量,有很多的重复计算。原创 2022-04-03 22:41:31 · 722 阅读 · 0 评论 -
LeetCode 1628. Design an Expression Tree With Evaluate Function - 亚马逊高频题18
本题麻烦的是要把题目搞明白,搞定题意后代码实现就相对简单。题目其实考察的是两点,一个是关于面向对象设计(OOP),即有关类的多态性(polymorphism)以及继承类的实现等;另一个就是实现把数组postfix转成二叉树的算法。原创 2022-03-28 21:40:51 · 730 阅读 · 0 评论 -
LeetCode 926. Flip String to Monotone Increasing - 亚马逊高频题
给定一个二进制字符串,你可以将字符串里的‘0’翻转成‘1’,或把‘1’翻转成‘0’。问最少要翻转多少次就可以使其变成单调递增的?根据题目对单调性的定义,把一个二进制字符串变成单调递增的,最终所有‘0’都应该集中在字符串前面,所有‘1’都集中在字符串后面。原创 2022-03-11 22:42:01 · 291 阅读 · 0 评论 -
LeetCode 663. Equal Tree Partition - 二叉树(Binary Tree)系列题30
题目说给定一棵二叉树,问是否能够找到一条边,移除这条边后形成两棵子树,使得这两棵子树的节点值和相等?二叉树和数组经常是可以类比的,还是先来看一下数组。给定一个数组,是否能找到一个位置把数组分成两个部分使得两部分的和相等?原创 2022-03-10 22:40:13 · 540 阅读 · 0 评论 -
LeetCode 814. Binary Tree Pruning - 二叉树(Binary Tree)系列题29
给定一棵二叉树,要求把所有不含节点值为1的子树剪掉。这一道关于二叉树修剪的问题,实际生活中要修剪一棵树肯定是从叶子开始修剪。同样的,本题也应该从叶节点开始从底向上修剪。原创 2022-03-09 22:42:35 · 198 阅读 · 0 评论 -
LeetCode 538. Convert BST to Greater Tree - 二叉树(Binary Tree)系列题28
给定一棵二叉搜索树(Binary Search Tree),要求把它转换成一棵更大树(Greater Tree)。所谓更大树,就是把原二叉搜索树中的每一个节点值变成它自身值加上原树中比该节点值大的所有节点值的和。先来看一下如果给定的是一个数组,如何把数组中每个数变成它自身加上所有比它大的数的总和?其实只要先把数组排序,那么数组中每个数所在位置之后的所有数都是比它大的数,因此只要从后往前进行累加就可以达到目的。原创 2022-03-08 23:03:01 · 354 阅读 · 0 评论 -
LeetCode 623. Add One Row to Tree - 二叉树(Binary Tree)系列题27
给定一棵二叉树和两个整数val和depth,根节点所在层定义为第一层,要求新增加一层节点值都为val的节点,作为树的新的第depth层(也就是说新增加的一层在原来第depth-1层的下一层)。原创 2022-03-07 23:25:26 · 183 阅读 · 0 评论 -
LeetCode 549. Binary Tree Longest Consecutive Sequence II - 二叉树系列题26
给定一棵二叉树,要求找出最长的连续路径,连续路径是相邻两个节点值相差1,但是沿着路径必须是递增的或递减的(不能是部分递增部分递减)。另外还规定路径不一定必须是从上往下的即从父节点到子节点,还可以是穿过一个节点的路径,即从子节点到父节点再到另一个子节点(只要是连续的即可)。原创 2022-03-06 23:29:26 · 331 阅读 · 0 评论 -
LeetCode 337. House Robber III - 二叉树系列题25
问题的关键是不能连续偷两个房子,如果是从上往下偷,那么偷了当前节点就不能偷它的两个子节点;如果是从下往上偷,那么偷了当前节点就不能偷它的父节点。原创 2022-03-05 22:30:26 · 623 阅读 · 0 评论 -
LeetCode 508. Most Frequent Subtree Sum - 二叉树系列题24
一棵二叉树,以它的每一个节点为根节点构成一棵棵子树,每棵子树的所有节点值的和叫做子树和,不同子树的子树和有可能相同,现在要求找出出现频率最高的所有子树和。暴力解法就是以每个节点为根节点求出它们对应子树的和,同时统计每个子树和出现的次数,从而找出出现次数最多的所有子树和。然而,如果每次都重复计算每棵子树的和,将耗费太多时间做重复计算原创 2022-03-04 23:14:57 · 473 阅读 · 0 评论 -
LeetCode 250. Count Univalue Subtrees - 二叉树系列题23
题目给定一棵二叉树,要求找出所有具有单一节点值的子树(即子树中所有节点值都相等),返回单一值子树的个数。首先来看看对于一个节点,以该节点为根节点的子树在什么情况下是一棵单一值子树。原创 2022-03-03 18:57:01 · 353 阅读 · 0 评论 -
LeetCode 129. Sum Root to Leaf Numbers - 二叉树系列题22
有一棵二叉树,每个节点的节点值都是在0~9范围内,从根节点到每个叶节点的路径代表一个数,路径的每个节点值表示这个数从高位到低位的一位。其实这题跟LeetCode 113. Path Sum II基本上差不多,区别是一个是把路径上所有节点值加起来,另一个是把路径上所有节点值转换成其表示的一个数。原创 2022-03-02 22:54:17 · 364 阅读 · 0 评论 -
LeetCode 117. Populating Next Right Pointers in Each Node II - 二叉树系列题21
给定一棵二叉树,该二叉树的节点结构除了节点值,左右子节点指针外,还有一个指针next,要求使每一个节点的next指向它所在层的右侧相邻的节点,如果节点已经是那一层的最右节点了那么next就指向空。涉及到二叉树层的概念,很自然会想到用水平遍历。原创 2022-03-01 22:54:30 · 347 阅读 · 0 评论 -
LeetCode 113. Path Sum II - 二叉树系列题20
题目给定一棵二叉树和一个目标数,要求从所有从根节点到叶节点的路径中找出路径和(路径中所有节点值的和)等于目标数的路径。要求每一条路径是以节点值组成的数组的形式返回。二叉树的前序遍历算法是从根节点开始到每个叶节点结束,其实也可以看做是遍历每一条从根到叶的路径。因此本题只要在常规的前序遍历算法上增加题目需要的信息即可。原创 2022-02-28 23:28:35 · 426 阅读 · 0 评论 -
LeetCode 107. Binary Tree Level Order Traversal II - 二叉树系列题19
题目要求从底向上水平遍历,即把从叶节点最低的一层开始到根节点的顶层结束,按顺序把一层层的节点值放入一个二维数组中。其实这题跟我们熟悉的从顶向下水平遍历差不多,只是结果的顺序相反而已。原创 2022-02-27 23:07:23 · 385 阅读 · 0 评论 -
LeetCode 536. Construct Binary Tree from String - 二叉树系列题18
任意一对括号(左右括号要匹配)里的子字符串表示一棵子树都具有相同结构,也就是说它们可以做相同的处理,因此很容易想到用递归来处理。以下来分析递归函数的实现原创 2022-02-26 21:11:53 · 377 阅读 · 0 评论 -
LeetCode 652. Find Duplicate Subtrees - 二叉树系列题17
我们对于如何比较两棵二叉树是否相同比较熟悉,因此这道题的暴力解法是对所有值相同的节点,两两进行比较从而找出相同的子树。很显然这将耗费大量时间,因此需要找更优解法。原创 2022-02-25 20:42:57 · 387 阅读 · 0 评论 -
LeetCode 671. Second Minimum Node In a Binary Tree - 二叉树系列题16
题目给定一棵特殊的非空二叉树,所有节点值为非负数,每个节点要么有两个子节点,要么没有子节点。如果一个节点有两个子节点,那么该节点值等于两个子节点中值小的那个节点值。要求找出这样的二叉树中第二小的节点值。原创 2022-02-24 22:43:02 · 568 阅读 · 0 评论 -
LeetCode Change the Root of a Binary Tree - 二叉树系列题15
题目要求重构一棵二叉树,给定一个根节点和一个叶节点,重构二叉树使其以给定叶节点为新的根节点。要求按以下规则对从叶节点开始往上到根节点(不包括根节点)的路径上的所有节点进行重构。原创 2022-02-23 22:59:51 · 500 阅读 · 0 评论 -
LeetCode 1602. Find Nearest Right Node in Binary Tree - 二叉树(Binary Tree)系列题14
题目给定一棵二叉树和一个节点,要求找出给定节点所在的那一层中右侧离该节点最近的那个节点,如果给定节点已经是那一层最右侧的节点了就返回空节点。根据题目描述,很显然是用水平遍历算法,我们常用BFS来实现水平遍历。原创 2022-02-22 22:47:36 · 387 阅读 · 0 评论 -
LeetCode 437. Path Sum III - 二叉树(Binary Tree)系列题13
先来看一个特殊情况,即二叉树从根节点到叶节点只有一条路径,那么就是求这条路径上存在几条子路径的和等于目标数。那就跟一个数组里存在几个子数组的和等于目标数一样了原创 2022-02-21 23:02:02 · 326 阅读 · 0 评论 -
LeetCode 662. Maximum Width of Binary Tree - 二叉树(Binary Tree)系列题13
题目要求一棵二叉树的最大宽度。树的每一层都有一个宽度,即从那一层最左边的节点到最右边节点的长度,计算长度时也要包括它们之间的空节点。树的最大宽度就是二叉树所有层中最大的那个宽度。如果熟悉如何用一个数组来表示一棵二叉树,那这题就相当简单了。原创 2022-02-20 23:27:58 · 430 阅读 · 0 评论 -
LeetCode 545. Boundary of Binary Tree - 二叉树(Binary Tree)系列题12
题目给定一棵二叉树具有n个节点,每个节点值node.val表示该节点所拥有的硬币数。硬币总数为n,也就是说有的节点可能超过一枚硬币,有的节点可能没有硬币,现在要求通过移动硬币使得最后每个节点都刚好拥有一枚硬币。每次移动只能从一个节点移动到其相连的节点(父节点,左子节点或右子节点),并且一次只能移动一枚硬币。问最少需要移动几次可以使得每个节点都有一枚硬币?原创 2022-02-19 06:11:41 · 288 阅读 · 0 评论 -
LeetCode 545. Boundary of Binary Tree - 二叉树(Binary Tree)系列题11
题目要求找出二叉树的边界的所有节点值,二叉树的边界包括根节点,左边界从上到下顺序,叶节点从左到右顺序,右边界从下到上顺序。根节点和叶节点简单明了,本题的难点在于求左边界和右边界,但是题目中对左边界的定义相当于告诉了我们解法,因此把左边界定义搞清楚本题也就不难了。右边界的解法跟左边界相似。原创 2022-02-18 06:25:07 · 487 阅读 · 0 评论 -
LeetCode 1110. Delete Nodes And Return Forest - 二叉树(Binary Tree)系列题10
基本思路是利用前序遍历处理每个节点。对于一个节点无外乎两种情况,在或不在to_delete中。为了便于查找节点是否在to_delete中,可以把to_delete中的节点放入一个set中;另外为了便于处理节点之间的连接关系,在遍历过程中还需引入当前节点的父节点原创 2022-02-17 23:27:55 · 378 阅读 · 0 评论 -
LeetCode 366. Find Leaves of Binary Tree - 二叉树(Binary Tree)系列题9
一个节点在第几层被剥离决定了它在结果中的位置,而一个节点是在第几层被剥离又取决于它的左右子树的最大高度原创 2022-02-17 02:21:29 · 205 阅读 · 0 评论 -
LeetCode 124. Binary Tree Maximum Path Sum - 二叉树(Binary Tree)系列题8
题目对二叉树中一条路径path做了定义,路径是一个节点序列,相邻节点间由一条边相连,每个节点在路径中只能出现一次,路径不一定要通过根节点,也不一定要以叶节点开始或结束。路径和就是路径中所有节点值的和。要求找出树中最大的路径和。根据以上对路径的描述,我们可以知道对于一个节点,经过该节点的具有最大路径和的路径一共有4条原创 2022-02-16 06:32:43 · 238 阅读 · 0 评论 -
LeetCode 314. Binary Tree Vertical Order Traversal - 二叉树(Binary Tree)系列题6
由于我们对水平顺序遍历算法很熟悉,因此本题就是在水平顺序遍历的基础上,给每个节点分配一个列号,这样就可以把具有相同列号的节点值放在一起。首先规定根节点的列号为0,然后以水平顺序遍历原创 2022-02-14 04:28:14 · 419 阅读 · 0 评论 -
LeetCode 103. Binary Tree Zigzag Level Order Traversal - 二叉树(Binary Tree)系列题5
如果对水平遍历二叉树算法比较熟悉,这题就比较简单。思路差不多,利用BFS算法以行为单位进行遍历。每隔一行需要需要把那行数值进行反转。原创 2022-02-13 23:52:46 · 306 阅读 · 0 评论 -
LeetCode 1676. Lowest Common Ancestor of a Binary Tree IV - 二叉树(Binary Tree)系列题4
这题要求找到n个节点的最低公共祖先LCA(Lowest Common Ancestor) 如果n为2,那么本题就变成了1644. Lowest Common Ancestor of a Binary Tree II,因此本题的解题思路也基本类似。原创 2022-02-13 02:31:00 · 278 阅读 · 0 评论 -
LeetCode 1650. Lowest Common Ancestor of a Binary Tree III - 二叉树(Binary Tree)系列题3
既然没有给定树的根节点,那自然是顺着p和q的父节点路径一路往上寻找,我们知道它们在父节点路径上交叉相遇的那个节点就是最低公共祖先LCA节点。仔细一看其实这题跟"160.Intersection of Two Linked Lists",一模一样,两条父节点路径相当于两个链表。有以下两种解法原创 2022-02-12 22:47:33 · 390 阅读 · 0 评论 -
LeetCode 1644. Lowest Common Ancestor of a Binary Tree II - 二叉树(Binary Tree)系列题2
基本思路还是遵循最低公共祖先LCA的原则,如果给定的两个p和q落在节点node的左右子树上,或者节点node就是p和q的其中一个而另一个落在node左子树或右子树上,那么节点node就是p和q的最低公共祖先。原创 2022-02-12 03:50:40 · 482 阅读 · 0 评论 -
LeetCode 236. Lowest Common Ancestor of a Binary Tree - 二叉树(Binary Tree)系列题1
基本解题思路就是通过递归法遍历二叉树去找节点p和q,但是并需要遍历整棵树,由于题目说了p和q一定存在,这样我们在递归查找只要碰到一个节点等于p或q就可以停止不用继续递归查找该节点左右子树的所有节点,即使是这时另外一个节点还没找到。原创 2022-02-11 20:05:07 · 407 阅读 · 0 评论