力扣-538-把二叉搜索树转换为累加树

1、什么是二叉搜索树?

二叉搜索树是一棵空树,或者是具有下列性质的二叉树:

  1. 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值;
  2. 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值;
  3. 它的左、右子树也分别为二叉搜索树

 

我们都知道二叉搜索树的中序遍历是递增的序列;那么反中序遍历就是递减的序列。那么我们只需要反中序遍历整棵二叉搜索树,记录过程中的节点值之和sum(因为当前节点之前的值必定都是大于它的),不断更新当前节点的节点值即可。

反中序遍历的结果:

8  7  6  5  4  3  2  1  0

8 15 21 26 30 33 35 36 36 //不断更新的Sum值

代码:

/**
 * 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) {
        if(root == null){
            return root;
        }
        convertBST(root.right);  //更新当前节点右子树的val值
        
        sum += root.val;
        root.val = sum;  //更新当前节点的val

        convertBST(root.left);  //更新当前节点左子树的val值
        return root;
    }
}

 

posted @ 2020-10-30 10:02  Peterxiazhen  阅读(88)  评论(0编辑  收藏  举报