538. 把二叉搜索树转换为累加树
解题思路
- 改造中序遍历算法
- 因为中序遍历的结果都是有顺序的 升序排序,那么如果先遍历右子树 在遍历左子树 那么结果就是降序的
- 最后我们设置一个变量 累加所有的中间值 那么得到的结果就是比当前节点大的所有节点的值
/*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val = val; }* TreeNode(int val, TreeNode left, TreeNode right) {* this.val = val;* this.left = left;* this.right = right;* }* }*/
class Solution {int sum = 0;public TreeNode convertBST(TreeNode root) {// 改造中序遍历算法traverse(root);return root;}void traverse(TreeNode root){if(root == null){return;}traverse(root.right);sum += root.val;// 每次叠加最大值 比他大的所有节点// 将BST 转化为累加树root.val = sum;traverse(root.left);}
}