LeetCode538. 把二叉搜索树转换为累加树
题目
LeetCode.538 把二叉搜索树转换为累加树
解题思路
- 对于一棵二叉搜索树,对其进行中序遍历,遍历结果是升序的。
- 对于一个升序的数组,按照本题题目的要求,计算每个元素的新值。那么通常的做法是从后往前遍历该数组,并将每个元素与上一个元素的值相加。这样就可以得到累加数组。
- 对于本题,可以用一个 int 类型的全局变量来记录前一个节点的值,然后采用 右 --> 中 --> 左 的遍历方式,来对节点的值进行累加。
递归思路
递归函数的作用
- 递归函数 convert 用于更新 BTS 的节点的值。
递归参数和返回值
- 参数:TreeNode root,需要更新的节点;
- 返回值:void,不需要返回值。因为函数的作用是更新 root 的值,只需直接修改 val 即可;
public void convert(TreeNode root) { }
递归结束条件
if(root == null) return;
单次递归逻辑
convert(root.right);
root.val += pre;
pre = root.val;
convert(root.left);
完整代码(核心)
class Solution {
int pre = 0;
public TreeNode convertBST(TreeNode root) {
convert(root);
return root;
}
public void convert(TreeNode root) {
if(root == null) return;
convert(root.right);
root.val += pre;
pre = root.val;
convert(root.left);
}
}