回溯算法:
白话:回溯法可以理解为通过选择不同的岔路口寻找目的地,一个岔路口一个岔路口的去尝试找到目的地。如果走错了路,继续返回来找到岔路口的另一条路,直到找到目的地。
递归:
递归算法是一种直接或者间接调用自身函数或者方法的算法。
解决思路:
在递归方法中,我们维护一些递归调用过程中可以访问和修改的全局变量。首先我们判断当前访问的节点是否存在,如果存在就递归右子树,递归回来的时候更新总和和当前点的值,然后递归左子树。如果我们分别正确地递归 root.right 和 root.left ,那么我们就能正确地用大于某个节点的值去更新此节点,然后才遍历比它小的值。
代码
class Solution{
private int sum=0;
public TreeNode converBST(TreeNode root){
if(root!=null){
covertBST(root.right);//递归右子树
sum+=root.val;
root.val=sum;
covertBST(root.left);//递归左子树
}
return root;
}
}