题目链接
题目分析
题目要求我们把大于等于当前结点的值累加起来然后替换掉该结点原来的值。考虑到这是一棵二叉搜索树,我们从右子树开始的中序遍历就是倒序数组。
我们需要一个pre指针指向前一个结点,就可以获得比你大的结点值之和,再加上当前结点的值就可以满足题目。
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
TreeNode pre = null;
public TreeNode bstToGst(TreeNode root) {
helper(root);
return root;
}
public void helper(TreeNode root){
if(root == null){
return;
}
helper(root.right);
if(pre != null){
root.val += pre.val;
}
pre = root;
helper(root.left);
}
}