一天一大 leet(二叉树中的最大路径和)难度:困难 DAY-21
时间:2022-07-25
本文章向大家介绍一天一大 leet(二叉树中的最大路径和)难度:困难 DAY-21,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
示例
- 示例 1
输入: [1,2,3]
1
/
2 3
输出: 6
- 示例 2
输入: [-10,9,20,null,null,15,7]
-10
/
9 20
/
15 7
输出: 42
抛砖引玉
使用递归出来二叉树
- 任取树中的一个节点,有两个选择,向左累计求和或者向右累计求和
- 借用递归,假设已经知道左侧的和右侧的和,sum(node.left),sum(node.right)
- 那如果结果路径中包含这个节点,和的组成是:
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxPathSum = function(root) {
let _result = -Number.MAX_VALUE;
sum_node(root)
function sum_node(node) {
if (node === null) return 0;
let left = Math.max(sum_node(node.left), 0);
let right = Math.max(sum_node(node.right), 0);
_result = Math.max(_result, left + right + node.val);
return node.val + Math.max(left, right);
}
return _result
};
其他解法
得到节点左侧右侧和的逻辑是一样 只是记录值的形式不同, 把当前节点能得到的最大和的值推送到数组中,再从数组中捡出最大值
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxPathSum = function(root) {
let resultArr = [];
let helper = function(node){
if(node == null) return 0;
let leftPathVal = Math.max(helper(node.left), 0);
let rightPathVal = Math.max(helper(node.right), 0);
resultArr.push(leftPathVal+rightPathVal+node.val)
return Math.max(leftPathVal,rightPathVal)+node.val;
}
resultArr.push(helper(root));
return Math.max.apply(null,resultArr);
};
- 厚土Go学习笔记 | 19. slice和数组很像,但是slice可以添加元素
- 工具| 手把手教你制作信息收集器之网站备案号
- 厚土Go学习笔记 | 18. 数组
- 厚土Go学习笔记 | 17. 结构体及用指针访问结构体
- Java枚举类型的原理
- 厚土Go学习笔记 | 27. 斐波纳契闭包
- 代码审计| APPCMS SQL-XSS-CSRF-SHELL
- 厚土Go学习笔记 | 33. 利用数据流实现密码代换功能
- 厚土Go学习笔记 | 32. Readers读取数据流
- GoStub框架二次开发实践
- 厚土Go学习笔记 | 31. 错误 通常函数会返回一个error值来判断是否出错
- 厚土Go学习笔记 | 30. Stringers的一个练习
- 黑客游戏| Owasp juice shop (一)
- 厚土Go学习笔记 | 29. 接口
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android抓包总结-HTTPS单向认证&双向认证突破
- 2020 ISG“观安杯”最高分值web题的解题思路大放送
- 详解 JS 压缩图片
- LeetCode 1553. Minimum Number of Days to Eat N Oranges
- 异步IO数据库队列缓存
- markdown转为pdf文件
- [已解决]报错:Required request body is missing
- jupyter notebook修改默认路径和浏览器
- python selenium while 循环
- implicitly_wait()隐式等待
- [已解决]python FileNotFoundError: [WinError 3] for getsize(filepath)
- [已解决]ValueError: row index was 65536, not allowed by .xls format
- 记一次由Redis分布式锁造成的重大事故,避免以后踩坑!
- ES6部分源码重写 -1(ES5-构造函数解析)
- ES6部分源码重写 -2(ES6-构造函数初步解析)