力扣:把二叉搜索树转换为累加树java
流程:
遍历方式:右中左,这样遍历搜索二叉树的相当于遍历递减的数组。这样就满足从最大节点累加。
设置一个pre存储前一个节点的值
递归三部曲:
参数和返回值:参数为当前节点,返回值为空
结束条件:节点为空就返回空
单层递归逻辑:
遍历当前节点右子树
中操作:将pre的值加上当前值赋值为当前值,
pre复制到为当前节点的值
遍历当前节点的左节点
代码:
class Solution {
int pre = 0;
public TreeNode convertBST(TreeNode root) {
converTree(root);//调用递归函数,对root进行改成累加树
return root;
}
public void converTree(TreeNode cur){//递归函数,参数为节点
if(cur == null) return;//结束条件,节点为空,返回上一层
converTree(cur.right);//遍历当前节点的右子树
cur.val = cur.val+pre;//中操作,赋值当前节点为,前一节点与当前节点的和
pre = cur.val;//记录前一节点的值,方便下一节的计算
converTree(cur.left);//遍历左子树
}
}