LeetCode538和1038、把二叉搜索树转换为累加树(BST思维)

1、题目描述

538、把二叉搜索树转换为累加树
1038、把二叉搜索树转换为累加树
两道题一样。
在这里插入图片描述

2、解法

/**
 * 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) {
    
    
        //从题目可以知道,当前的节点新值 = 所有原树中大于或等于 node.val 的值之和。
        //——这是BST的题目,那么就和中序遍历脱离不了关系了,我们要找大于或等于node.val的值的节点,我们需要
        //中序遍历得到的序列是降序,这样我们可以维护一个sum,记录比当前节点大或者相等的其他节点的值的和
        if(root==null) return null;

        //框架——降序,先遍历右子树再遍历左子树
        convertBST(root.right);

        sum+=root.val;
        root.val = sum;
        convertBST(root.left);
        return root;
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44861675/article/details/114260948