退出条件:当前遍历到的节点为空,返回sum值
过程是逆中序深度优先遍历:
带着sum去遍历右子树,返回遍历后累加得到的sum
将当前节点node.val和sum累加,使node.val符合题目要求
将node.val作为sum值带着去遍历左子树
完成当前层的逆中序遍历步骤后,将sum返回上一层
class Solution {
private:
int dfs(TreeNode* node, int sum){
if(node == NULL)
return sum;
sum = dfs(node->right, sum);
node->val += sum;
sum = dfs(node->left, node->val);
return sum;
}
public:
TreeNode* convertBST(TreeNode* root) {
if(root)
dfs(root, 0);
return root;
}
};