题目传送门:力扣​leetcode-cn.com

昨天下午突然接到某公司算法岗面试,问到的算法题。

题目描述:

给定一个非空二叉树,返回其最大路径和。

本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。

可以将这颗二叉树看作为联通图,每个节点都有一个数值,输出最大的无环路径(每个点只能经过一次)。

被问到这题还是很慌的,由于最近几天才在找工,题也没刷多少,这题我都没做过(太菜了),搞的我当场直接沉默了一分钟有余。但我随后意识到二叉树这一数据结构还是很特殊的,一般应该递归地计算,那么怎么递归呢?

思路

如果构造一个递归地遍历二叉树的函数,那么在对于每一个叶子节点而言,显然应该是返回叶子节点自己的值,意义是叶子节点自己就是当前状态的最大路径。所以在这里,状态可以视作为:经过当前节点的最大路径值。但是对于非叶子节点而言情况复杂一些。首先,假如根据我们先前的定义,每个节点都是返回经过当前状态的最大路径的话,其父节点的最大路径值不一定需要这个最大路径,因为可能这个最大路径是包括了子节点左右两棵子树,这样就不满足路径的定义,即:每个节点只能经过一次。在这里纠正了前面的“经过当前节点的最大路径值“的推断(面试的时候我一开始也是这样犯错的)。

那么为了使得状态的返回值对于其父节点而言是有效的,状态的意义应该调整为,从当前节点出发,沿着一个子树搜索得到的最大路径,这条路径保证一个终点是当前节点。这样,这个状态值才可以为上一个节点所用。那么现在又出现一个问题:现在最大路径是什么呢,因为这才是我们要求的答案。我们依旧考虑其中的任意一个节点状态,如果我们知道了末端在左子树,起点在当前节点的最长路径,同时也知道了末端在右子树,起点在当前节点的最长路径,那么两者合并就是经过当前节点的最长路径。故我们只需要用一个全局变量记录比较即可,因为最后返回值必须还是其中一支最大路径,不一定经过根结点。由于节点的值可能为负数,因此还需要加上0比较,其意义是如果有一个子树的返回值为负数,就不需要考虑这条路径了,因为这会带来负面影响。

转移方程:

边界情况为无子树:

最大路径的值:

最终答案:

代码

# Definition for a binary tree node.

# class TreeNode:

# def __init__(self, x):

# self.val = x

# self.left = None

# self.right = None

class Solution:

def dfs(self,node: TreeNode) ->int :

if node.left == None:

lm = 0

else:

lm = self.dfs(node.left)

if node.right == None:

rm = 0

else:

rm = self.dfs(node.right)

if max(lm+rm,0,rm,lm)+node.val > self.m:

self.m = max(lm+rm,0,rm,lm)+node.val

return max(lm,0,rm)+node.val

def maxPathSum(self, root: TreeNode) -> int:

self.m = -0xFFFFFFFF

self.dfs(root)

return self.m

备注:这是一道树形DP的经典例题,还是要多刷题啊,要不然面试差点翻车。

二叉树最大路径和 python_[面试题]二叉树中最大路径和相关推荐

  1. js相对路径相关(比如:js中的路径依赖导入该js文件的路径)

    问题描述: 前几天调用同事的js接口文件,在他自己的html测试页面ok,在我这边调用时出现问题. debug过程中,将该测试html移到其他位置都不行,放到原html测试页面同层次路径下是OK的. ...

  2. java文件的路径怎么设置,如何在Java中设置路径

    本文概要 是必需的路径使用工具,如javac的,Java等要被设置 如果要保存的JDK / bin目录中的Java源文件,不需要路径设置,因为所有的工具将在当前目录中可用. 但是,如果你有你的Java ...

  3. C/C++面试题—矩阵中的路径【回溯法应用】

    题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...

  4. JAVA项目中classpath路径详解

    classpath是什么路径? 1.classpath指的是类路径,也就是编译之后的target文件夹下的WEB-INF/class文件夹. 2.resources文件夹存放的是各种配置文件,当项目被 ...

  5. java项目中Classpath路径到底指的是哪里?

    1.src不是classpath, WEB-INF/classes,lib才是classpath,WEB-INF/ 是资源目录, 客户端不能直接访问. 2.WEB-INF/classes目录存放src ...

  6. Java 中访问路径的问题

    在Java中路径分为绝对路径和相对路径 访问路径 通常访问路径也就是URL,统一资源定位符,URL由两部分组成资源路径和资源名称 资源名称也就是你要访问的路径,就比如我的image,我的image是访 ...

  7. 用servlet路径访问一个html,java web中servlet、jsp、html 互相访问的路径问题

    在html">java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. html">java web中的路径使用按我的分法可以分两种情况,当 ...

  8. ps里html在哪,PS中的路径面板的使用教程

    在运用Photoshop应用程序时,有时我们会被要求创建一个新的路径,那么大家知道PS中的路径面板如何用吗?下面是学习啦小编整理的PS中的路径面板如何用的方法,希望能给大家解答. PS中的路径面板用的 ...

  9. JavaWeb中访问路径问题

    文章目录 1.访问路径的组成 2.绝对路径 3.相对路径 3.1.以斜杠开头的相对路径 3.2.以路径名称开头的相对路径 3.3.总结 4.前台路径问题举例 5.后台路径问题举例 6.以路径名称开头的 ...

最新文章

  1. java培训教程分享:Java中用户如何自定义异常?
  2. IDEA打包成war部署web项目
  3. OVS DPDK--介绍(二)
  4. CSS :hover 伪类
  5. [Flink]Flink1.3 Stream指南六 事件时间与处理时间
  6. ionic build Android错误记录 error in opening zip file
  7. hihoCoder #1445 : 后缀自动机二·重复旋律5
  8. Struts2拦截器实现异常处理机制
  9. Unity Pixel 人物设计(1)
  10. cad文本改宋体字型lisp_给CAD初学者的一些建议
  11. [HAOI 2012]音量调节
  12. 计算机控制技术于海生第二版知识点,计算机控制技术 第2版
  13. 百度地图api-基本用法总结
  14. 三大重组股上涨最具爆发力!
  15. DNSPod十问杨晓东:从.cn看中国互联网进化史
  16. 一只喵的西行记-9 喵林英雄虹猫梦
  17. 测绘资质申请标准及好处
  18. 算法——暴力之美(volence‘s beautify of algorithm)
  19. 人生历程3——华为赋予我的奋斗价值观责任感(回忆录)
  20. Windows10桌面图标变白解决方案

热门文章

  1. oracle怎样查询某用户下的所有表的表名
  2. 使用sortable插件实现列表中表项的拖曳排序操作8-3
  3. React解决长列表方案(react-virtualized)
  4. 404错误,500错误页面的代表意思
  5. Linux CentOS6编译安装Python2.7
  6. MySQL在线DDL工具pt-osc
  7. IDEA_Debug_checks references injected by intellilang plugin
  8. jquery的一个代码
  9. iphone内关于sqlite开发的相关教程
  10. [蛋蛋の插画日记]囧...居然漏了一期《可爱100》!