Binary Tree Maximum Path Sum

来源:互联网 发布:陕西省大数据集团股东 编辑:程序博客网 时间:2024/06/06 00:07

弄清楚这道题中的path指的是什么是成功的关键。我就是在没弄清楚题意的情况下做了半天无用功。。。

这里的path指的是从树中的一个节点开始,沿着边走到另一个节点位置,所经历的所有节点组成一个path,同一个节点不能在path中出现2次,其实就是图中的path。


程序主体主需要对树进行一次dfs即可,在每个节点都要做一个决策:是否要从当前节点继续沿parent路径往上返回;如果返回,则最佳路径的决策留待上层解决;如果不返回,那么在当前节点处解决最佳路径。

pathStart返回的是以参数root为path的一端,另一端在root以下寻找,所能找到的最佳路径。

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int res;    int pathStart(TreeNode* root)    {        if((root->left==NULL)&&(root->right==NULL))        {            if(root->val>res)            {                res=root->val;            }            return root->val;        }        int tmp=root->val;//save the value need to be further checked along parent path        int curVal=root->val;//save the value do not need to be further checked along parent path        if(root->left!=NULL)        {            //extend to left child            int v=pathStart(root->left);            if(v>=0)            {               if((root->val+v)>tmp)               {                   tmp=root->val+v;               }               curVal+=v;            }        }        if(root->right!=NULL)        {            //extend to right child            int v=pathStart(root->right);            if(v>=0)            {               if((root->val+v)>tmp)               {                   tmp=root->val+v;               }               curVal+=v;            }        }        if(curVal>res)        {            res=curVal;        }        //extend to parent        return tmp;    }    int maxPathSum(TreeNode *root) {        res=-(1<<31);        if(root==NULL)        {            return 0;        }        int tmp=pathStart(root);        if(tmp>res)        {            res=tmp;        }        return res;    }};


0 0
原创粉丝点击