反转中序遍历
算法思路
- 二叉搜索树的特点是左小右大,而题目的要求是,将当前结点改为,树中大于等于该结点的所有结点的和。
- 由二叉搜索树的性质不难看出,大于等于当前结点的,不就是它右子树所有结点的和,加上它本身吗?
- 因此右->中->左的顺序非常合适。
如何设计递归函数
- 由示例图可以看出,左边的和其实是由右边的和累加而来,我们就可以使用一个全局变量,保存每一步的累加和。而不必每次递归返回一个值,直接在原函数上递归即可。
class Solution {
int right = 0;
public TreeNode convertBST(TreeNode root) {
if (root != null) {
convertBST(root.right);
right += root.val;
node.val = right;
convertBST(root.left);
}
return root;
}
}