探索异域魅力的终极门户:91av在线播放东南亚精彩视频,开启你的感官盛宴

核心内容摘要

“拔插拔插”的连接:海外华人,根脉何在?
鸣人到小樱家砰砰:青春的回响,羁绊的序曲

可乐导航,点亮福建教育新征程

思路本题和

二叉树的直径类似。

1链从下面的某个节点不一定是叶子节点到当前节点的路径这条链的节点值之和即为dfs的返回值。

如果节点值之和是负数则返回0因为要和0取最大值。

2直径等价于由两条或者一条链拼成的路径。

我们枚举每个node假设直径在这里“拐弯”也就是计算由左右两条从下面的某个节点不一定是叶子节点到node的链的节点值之和然后去更新答案的最大值。

注意dfs返回的是链的节点值之和不是直径的节点值之和。

疑问如果节点值都是负数会得出什么结果答如果所有节点值都是负数那么就是要求最大节点值即绝对值最小的负数。

因为在所有节点值都为负数的情况下路径中只有一个最大节点值即绝对值最小的负数是最优的毕竟随着节点数量的增多路径和只会减小此时求出来的最大路径和就是max(nums)。

递归三部曲

确定递归函数的参数和返回值类型1参数根节点root。

2返回值类型返回最大路径和为int类型。

3全局变量ans记录最大路径和。

private int ans Integer.MIN_VALUE; public int maxPathSum(TreeNode root)

确定终止条件如果节点为空则返回0。

不存在节点的话最大路径自然是0。

if(node null){ return 0; }

确定单层递归的逻辑因为求最大路径和要先知道左子树和右子树的链长因此采用后序遍历的顺序先递归左右子树再求最大路径和。

int left dfs(node.left); int right dfs(node.right); // 计算全局答案计算以当前节点为根的最大路径和因此可以返回两条链 ans Math.max(ans,left right node.val); // 是递归过程只需返回从左子树或右子树到当前节点的最大路径链给上层是告诉父节点从我这个节点往下走能得到的最大链和是多少 return Math.max(Math.max(left,right) node.val,

;复杂度分析1时间复杂度O(n)其中n为二叉树的节点个数。

2空间复杂度O(n)最坏情况下二叉树会退化成一条链递归需要O(n)的栈空间。

附代码class Solution { private int ans Integer.MIN_VALUE; public int maxPathSum(TreeNode root) { dfs(root); return ans; } private int dfs(TreeNode node){ if(node null){ return 0; } int left dfs(node.left); int right dfs(node.right); // 计算全局答案计算以当前节点为根的最大路径和因此可以返回两条链 ans Math.max(ans,left right node.val); // 是递归过程只需返回从左子树或右子树到当前节点的最大路径链给上层是告诉父节点从我这个节点往下走能得到的最大链和是多少 return Math.max(Math.max(left,right) node.val,

; } }

鉴黄师免费下载-鉴黄师免费下载应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123