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

一般来说这些题目就不用考虑非递归的解法了(尽管事实上道理是跟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. python接口自动化23-token参数关联登录(登录拉勾网)

    前言 登录网站的时候,经常会遇到传token参数,token关联并不难,难的是找出服务器第一次返回token的值所在的位置,取出来后就可以动态关联了 登录拉勾网 1.先找到登录首页https://pa ...

  2. Navicat工具里的empty table和truncate table的区别

    如图: 相同点:都会清空数据表里的所有数据 不同点:empty table是清空表里的数据:truncate table是删除表,然后再创建这张表 意义:对于主索引自动增加的情况,empty清表后,新 ...

  3. OpenCV学习(8) 分水岭算法(2)

        现在我们看看OpenCV中如何使用分水岭算法.     首先我们打开一副图像:    // 打开另一幅图像   cv::Mat    image= cv::imread("../to ...

  4. android 模拟器无法ping通主机

    很多时候我们通过adb 连接 android 模拟器调试网络程序,也许你能直接访问浏览器,浏览网站,但是却无法ping同局网的一个机器,比如: # ping www.sina.com         ...

  5. SQL insert失败时也会造成自增长字段加1

    CREATE TABLE #test(id INT IDENTITY(1,1), NAME varchar(30)) INSERT #test(name)SELECT '41545' SELECT   ...

  6. java学习笔记9--内部类总结

    java学习笔记系列: java学习笔记8--接口总结 java学习笔记7--抽象类与抽象方法 java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--对 ...

  7. 文件及文件夹更改通知/监测软件TheFolderSpy

    TheFolderSpy是Windows环境下一个监测文件(夹)更改,删除,创建,重命名的绿色免安装小软件,并在文件及文件夹有更改时发送Email通知管理者 该软件使用.Net开发,所以需要安装.Ne ...

  8. 词向量( Distributed Representation)工作原理是什么

    原文:http://www.zhihu.com/question/21714667 4 个回答 83赞同反对,不会显示你的姓名 皮果提 刘鑫.莫教授要养猫.Starling Niohuru 等人赞同 ...

  9. 【pyhon】理想论坛单帖爬虫取得信息存入MySql数据库

    代码: # 单帖爬虫,用于爬取理想论坛单个帖子得到发帖人,发帖时间和回帖时间并存入数据库,url例子见main函数 from bs4 import BeautifulSoup import reque ...

  10. (算法)Hanoi Problem汉诺塔问题

    Problem: There are three poles and N disks where each disk is heaver than the next disk. In the init ...