首页 理论教育 在二叉树中找最大路径和的方法

在二叉树中找最大路径和的方法

时间:2023-10-31 理论教育 版权反馈
【摘要】:比如给定以下二叉树:返回10。同理求出以root.right为起始结点,叶子结点为终结点的最大路径和maxRight。包含root结点的最长路径可能包含如下三种情况:leftMax=root.val+maxLeft。在求出包含root结点的最大路径后,如果tmpMax>max,那么更新最大路径和为tmpMax。

在二叉树中找最大路径和的方法

【出自HW面试题】

难度系数:★★★★☆ 被考察系数:★★★★☆

题目描述:

给定一棵二叉树,求各个路径的最大和,路径可以以任意结点作为起点和终点。比如给定以下二叉树:

返回10。

分析与解答:

本题可以通过对二叉树进行后序遍历来解决,具体思路如下:

对于当前遍历到的结点root,假设已经求出在遍历root结点前最大的路径和为max。

(1)求出以root.left为起始结点,叶子结点为终结点的最大路径和为maxLeft。

(2)同理求出以root.right为起始结点,叶子结点为终结点的最大路径和maxRight。

包含root结点的最长路径可能包含如下三种情况:(www.xing528.com)

(1)leftMax=root.val+maxLeft(左子树最大路径和可能为负)。

(2)rightMax=root.val+maxRight(右子树最大路径和可能为负)。

(3)allMax=root.val+maxLeft+maxRight(左右子树的最大路径和都不为负)。

因此,包含root结点的最大路径和为tmpMax=max(leftMax,rightMax,allMax)。

在求出包含root结点的最大路径后,如果tmpMax>max,那么更新最大路径和为tmpMax。

实现代码如下:

程序的运行结果如下:

10

算法性能分析:

二叉树后序遍历的时间复杂度为O(N),因此,这种方法的时间复杂度也为O(N)。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈