
原题链接
- 中序遍历的值: 36 36 35 33 30 26 21 15 8 是一个递减的数列,反中序遍历的值:8 15 21 26 30 33 35 36 36 是一个递增的数列
- 只需要反序中序遍历该二叉搜索树,记录过程中的节点值之和,并不断更新当前遍历到的节点的节点值,即可得到题目要求的累加树
- 从树中可以看出累加的顺序是右中左,所以我们需要反中序遍历这个二叉树,然后顺序累加就可以了
- 其中int sum 是全局变量,而不能定义在convertBST内部
- 二刷:主要是通过 按照 右 中 左的顺序来遍历,不停的累加root.val 来实现了转换成累加树
class Solution {
int sum = 0;
public TreeNode convertBST(TreeNode root) {
convertBST1(root);
return root;
}
public void convertBST1(TreeNode root){
if(root == null) return;
convertBST1(root.right);
sum += root.val;
root.val = sum;
convertBST1(root.left);
}
}