*选择后序是因为选择方向确定,如果是前序的话,root左右两个节点不好选择,而后序能避免此问题; *
从叶子节点开始选择,两个子节点的值中选择最大值,如果比0小,放弃此路径,否则,每次都取一棵小子树的最大值,即(左中右)

    int ans=-INT32_MAX;
    int dfs(TreeNode*root){
        if(!root){
            return 0;
        }
        int left=max(dfs(root->left),0);
        int right=max(dfs(root->right),0);
        ans=max(ans,root->val+left+right);
        return root->val+max(left,right);
    }
    int maxPathSum(TreeNode* root) {
        // write code here
        if(root==nullptr)return 0;
        dfs(root);
        return ans;
    }