class Solution {
public TreeNode convertBST(TreeNode root) {
dfs(root,0);
return root;
}
public int dfs(TreeNode root,int current){
if(root==null)
return current;
int back = dfs(root.right,current);
root.val = back+root.val;
return dfs(root.left,root.val);
}
}
current参数的含义是目前已知的比当前结点大的数字总和,又因为我们的访问顺序是右根左,在不断往右子树深度搜索的过程中,current参数是未知的,我们必须要先遍历到最右下的叶子结点以后再通过设置一个返回值才能知道结果,因此我们设置back作为右子树的返回值,该返回值+该结点本身的值即是比该结点大的数字的结果。然后我们可以将这个结果传入该结点的左子树的current参数中,左子树的所有结果就得基于current进行计算了。