題目:
我的思路:
也挺不錯的!!!
/**
* 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 f(TreeNode* root)
{//把每个结点都当做根节点,然后只考虑下面的对他的影响。
if(root==nullptr) return 0;
root->val=root->val+f(root->right);
return root->val+f(root->left);
}
void f2(TreeNode* root,int c)
{//包括root及其所有子节点,都需要加上c
if(root==NULL) return;
root->val+=c;
f2(root->left,root->val);
f2(root->right,c);
}
TreeNode* bstToGst(TreeNode* root) {
if(root==NULL) return root;
f(root);
f2(root,0);
return root;
}
};
题解:反序中序遍历:
我太菜了。