两遍遍历。第一遍是为了算出整体的和,无论什么遍历顺序都可以。第二遍必须是中序遍历,因为是为了算出比当前节点小的和。
class Solution {
int sum = 0;
int sum1 = 0;
public TreeNode convertBST(TreeNode root) {
plus(root);
inorder(root);
return root;
}
public void plus(TreeNode root){
if(root==null) return;
plus(root.left);
sum += root.val;
plus(root.right);
}
public void inorder(TreeNode root){
if(root==null) return;
inorder(root.left);
sum1 +=root.val;
root.val = sum-sum1+root.val;
inorder(root.right);
}
}
来源:CSDN
作者:爱打篮球的憨憨
链接:https://blog.csdn.net/xiaobailaji/article/details/104704017