当前节点下
1.如果有右子树,则先递归右子树。得出右子树累加和。当前节点为和加最大值。
2.如果无右子树,则当前值为原树值+MAX(左子树和,父节点值)。
3.如果左子树,则递归左子树。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int solve(TreeNode *root, TreeNode **ans, int sum) {
if (root == NULL)
return 0;
//cout << root->val << endl;
int tmp = 0;
*ans = new TreeNode(0);
if (root->right != NULL)
tmp = solve(root->right, &((*ans)->right), sum);
(*ans)->val = root->val + max(tmp, sum);
tmp = (*ans)->val;
if (root->left != NULL)
tmp = solve(root->left, &((*ans)->left), tmp);
return tmp;
}
TreeNode* bstToGst(TreeNode* root) {
TreeNode *ans;
solve(root, &ans, 0);
return ans;
}
};