题目:给定一个非空二叉树,返回其最大路径和。
本题中,路径被定义为一条从树中任意节点出发,达到任意节点的序列。该路径至少包含一个节点,且不一定经过根节点。
首先可以想到计算每个节点的权值,这个权值由以这个节点为根节点的树计算得到。权值=根节点value+较大值(左子树权值+右子树权值)可以通过递归实现。
而路径和则能以 根节点value+左子树权值+右子树权值 来表示,这样涵盖了树中所有的路径情况。然后用一个MaxSum变量来维护最大路径和即可。而且递归的特点使得可以进行回溯,因此可以从叶子节点往上遍历所有的路径和
class Solution {
public:
int maxGain(TreeNode* root)//递归计算节点的最