注意是二叉搜索树,可以找出顺序 ! 有点类似中序遍历  思路:当前结点 root 带着父值一直走到最右边,再一个个累加右值 更新 root.val += rightSum,然后以 root.val 作为左子树的父值,递归这个过程 左子树递归结束,当前 root 的栈帧返回左子树的值(毕竟这边才是最大值嘛) 时间复杂度O(n),相当于遍历每一个结点 
class  Solution  { public  TreeNode  convertBST ( TreeNode  root)  { toConvertBST ( root,  0 ) ; return  root; } int  toConvertBST ( TreeNode  root,  int  paNum) { if ( root ==  null ) { return  paNum; } int  rightSum =  toConvertBST ( root. right,  paNum) ; root. val +=  rightSum;  int  leftSum =  toConvertBST ( root. left,  root. val) ; return  leftSum; } 
} 
一段时间过去后,写出了更加简单的代码呢! 思路还是:右 - 根 - 左,递归 class  Solution  { int  preNum =  0 ; public  TreeNode  convertBST ( TreeNode  root)  { if ( root !=  null )  { convertBST ( root. right) ; root. val +=  preNum; preNum =  root. val; convertBST ( root. left) ; } return  root; } 
}