https://www.cnblogs.com/grandyang/p/6591526.html
这个题本质上是中序遍历的反向。中序遍历是从小到大,而这个题目是从大到小,然后每个数加上比自己大的所有数的和。
因为实际上并没有改变树的结构,只是改变了原来树中节点的值,所以用void做返回值就可以了。
每次加sum实际上就是加的所有比当前节点大的数的和,并且这个和一定等于前一个节点的更新值。
class Solution { public: TreeNode* convertBST(TreeNode* root) { int sum = 0; convertCore(root,sum); return root; } void convertCore(TreeNode* root,int &sum){ if(root == NULL) return; convertCore(root->right,sum); root->val += sum; sum = root->val; convertCore(root->left,sum); } };