树的求和属于树的题目中比較常见的,由于能够有几种变体,灵活度比較高,也能够考察到对于树的数据结构和递归的理解。

一般来说这些题目就不用考虑非递归的解法了(尽管事实上道理是跟LeetCode总结 -- 树的遍历篇一样的。仅仅要掌握了应该没问题哈)。

LeetCode中关于树的求和有下面题目:
Path Sum
Path Sum II
Sum Root to Leaf Numbers
Binary Tree Maximum Path Sum

我们先来看看最常见的题目Path Sum。这道题是推断是否存在从根到叶子的路径和跟给定sum同样。树的题目基本都是用递归来解决,主要考虑两个问题:
1)怎样把问题分治成子问题给左子树和右子树。

这里就是看看左子树和右子树有没有存在和是sum减去当前结点值得路径。仅仅要有一个存在。那么当前结点就存在路径。

2)考虑结束条件是什么。这里的结束条件一个是假设当前节点是空的。则返回false。

还有一个假设是叶子,那么假设剩余的sum等于当前叶子的值。则找到满足条件的路径,返回true。

想清楚上面两个问题,那么实现起来就是一次树的遍历,依照刚才的分析用參数或者返回值传递须要维护的值。然后依照递归条件和结束条件进行返回就可以。算法的时间复杂度是一次遍历O(n),空间复杂度是栈的大小O(logn)。
对于Path Sum II。事实上思路和Path Sum是全然一样的。仅仅是须要输出全部路径,所以须要数据结构来维护路径,加入两个參数,一个用来维护走到当前结点的路径,一个用来保存满足条件的全部路径,思路上递归条件和结束条件是全然一致的。空间上这里会依赖于结果的数量了。

Sum Root to Leaf Numbers这道题多了两个变化,一个是每个结点相当于位上的值。而不是本身有权重。只是事实上没有太大变化。每一层乘以10加上自己的值就能够了。

还有一个变化就是要把全部路径累加起来,这个事实上就是递归条件要进行调整,Path Sum中是推断左右子树有一个找到满足要求的路径就可以,而这里则是把左右子树的结果相加返回作为当前节点的累加结果就可以。

变化比較大并且有点难度的是Binary Tree Maximum Path Sum,这道题目的路径要求不再是从根到叶子的路径,这个题目是把树全然看成一个无向图。然后寻找当中的路径。想起来就认为比上面那种麻烦很多。只是细致考虑会发现还是有章可循的,找到一个根节点最大路径。无非就是找到左子树最大路径,加上自己的值,再加上右子树的最大路径(这里左右子树的路径有可能不取,假设小于0的话)。我们要做的事情就是对于每个结点都做一次上面说的这个累加。而左子树最大路径和右子树最大路径跟Path Sum II思路是比較相似的。尽管不一定要到叶子节点,只是标准也非常easy,有大于0的就取,假设走下去路径和小于0那么就不取。

从分治的角度来看,左右子树的最大路径就是取自己的值加上Max(0,左子树最大路径。右子树最大路径)。这么一想也就不用考虑那么多细节了。

而通过当前节点的最长路径则是自己的值+Max(0,左子树最大路径)+Max(0,右子树最大路径)。

所以整个算法就是维护这两个量,一个是自己加上左或者右子树最大路径作为它的父节点考虑的中间量。还有一个就是自己加上左再加上右作为自己最大路径。详细的实现能够參见Binary Tree Maximum Path Sum

这篇总结主要讲了LeetCode中关于树的求和的题目。

整体来说,求和路径有下面三种:(1)根到叶子结点的路径。(2)父结点沿着子结点往下的路径。(3)随意结点到随意结点(也就是看成无向图)。

这几种路径方式在面试中常常灵活变化,不同的路径方式处理题目的方法也会略有不同,只是最复杂也就是Binary Tree Maximum Path Sum这样的路径方式。仅仅要考虑清楚仍然是一次递归遍历的问题哈。

LeetCode总结 -- 树的求和篇的更多相关文章

  1. LeetCode总结 -- 树的性质篇

    树的性质推断是树的数据结构比較主要的操作,一般考到都属于非常easy的题目,也就是第一道入门题.面试中最好不能有问题,力求一遍写对.不要给面试官不论什么挑刺机会.LeetCode中关于树的性质有下面题 ...

  2. LeetCode总结 -- 树的遍历篇

    遍历树的数据结构中最常见的操作. 能够说大部分关于树的题目都是环绕遍历进行变体来解决的. 一般来说面试中遇到树的题目是用递归来解决的, 只是假设直接考察遍历. 那么一般递归的解法就过于简单了. 面试官 ...

  3. LeetCode刷题总结-数组篇(中)

    本文接着上一篇文章<LeetCode刷题总结-数组篇(上)>,继续讲第二个常考问题:矩阵问题. 矩阵也可以称为二维数组.在LeetCode相关习题中,作者总结发现主要考点有:矩阵元素的遍历 ...

  4. POJ 2823 Sliding Window 线段树区间求和问题

    题目链接 线段树区间求和问题,维护一个最大值一个最小值即可,线段树要用C++交才能过. 注意这道题不是求三个数的最大值最小值,是求k个的. 本题数据量较大,不能用N建树,用n建树. 还有一种做法是单调 ...

  5. hdu 4288 离线线段树+间隔求和

    Coder Time Limit: 20000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Su ...

  6. LeetCode刷题总结-数组篇(上)

    数组是算法中最常用的一种数据结构,也是面试中最常考的考点.在LeetCode题库中,标记为数组类型的习题到目前为止,已累计到了202题.然而,这202道习题并不是每道题只标记为数组一个考点,大部分习题 ...

  7. LeetCode刷题总结-数组篇(下)

    本期讲O(n)类型问题,共14题.3道简单题,9道中等题,2道困难题.数组篇共归纳总结了50题,本篇是数组篇的最后一篇.其他三个篇章可参考: LeetCode刷题总结-数组篇(上),子数组问题(共17 ...

  8. 【LeetCode】树(共94题)

    [94]Binary Tree Inorder Traversal [95]Unique Binary Search Trees II (2018年11月14日,算法群) 给了一个 n,返回结点是 1 ...

  9. LeetCode:树专题

    树专题 参考了力扣加加对与树专题的讲解,刷了些 leetcode 题,在此做一些记录,不然没几天就没印象了 力扣加加-树专题 总结 树的定义 // Definition for a binary tr ...

随机推荐

  1. 【docker】docker network常用命令参数

    1.帮助命令 docker network --help 2.查看docker默认三种网络 docker network ls 3.创建自定义网络,如果不指定,默认创建类型为bridge类型 dock ...

  2. MySQL year函数

    mysql的日期函数,示例如下:

  3. Win10系统中新增的快捷键,做个记录

    Win10系统中新增的快捷键,做个记录 1.Win+Q或者Win+S 打开下面搜索框                                2.Win+T 切换任务栏上程序:   3.Win+ ...

  4. C#获取相对路径[转]

    C#最常使用的相对路径是从当前程序所在路径开始相对寻径,找到要找的路径,即以下两种最简单的方式: 1. 程序根目录.(即exe程序所在路径) //下面两个路径是等价的,都是exe程序所在路径(通常是b ...

  5. 一个十分简洁实用的MD风格的UI主框架

    2017-5-23 详见:https://github.com/baiqiantao/CheesesquareSample MainActivity public class MainActivity ...

  6. 零基础学python-3.5 内存管理

    * 变量无需事先声明 * 变量无需指定类型 * 程序猿不用关系内存管理 * 变量名会被回收 * del能够直接释放资源 1.python使用的是引用调用,而不是值调用,他使用的回收算法是引用计数算法, ...

  7. Oracle日期周具体解释以及周開始结束时间计算

    1 ORACLE中周相关知识描写叙述 1.1           日期格式化函数 TO_CHAR(X [,FORMAT]):将X按FORMAT格式转换成字符串. X是一个日期,FORMAT是一个规定了 ...

  8. 截短字符串的函数(JS中适用)

    function cutShort(str){    if(str.length>15){        str=str.substr(0,15)+"...";    }   ...

  9. .NET破解之爱奇迪(一)

    今天无意中看到了wuhuacong(伍华聪)的专栏,界面写得还是很炫的感觉,于是在广州爱奇迪官网下载一个来试一下——客户关系管理系统.下面是成果: 00.总体把握 里面有Logon窗口(为什么不是Lo ...

  10. Python方法完成农历日历功能代码

    来自 #coding=utf-8 #****************************************************************************** # 下 ...