538. Convert BST to Greater Tree

Posted skillking

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了538. Convert BST to Greater Tree相关的知识,希望对你有一定的参考价值。

一、题目

  1、审题

  技术图片

  

  2、分析

    给出一棵二叉搜索树。将所有节点值加上比他大的所有节点值。

 

二、解答

  思路:

    采用类似中序(左-->根-->右)遍历的方式。实际采用 (右--> 根 --> 左)。遍历时,统计所有遍历的节点之和。

 

  方法一、

    采用一个 Stack 进行二叉树遍历。同时更新节点值。

    public TreeNode convertBST(TreeNode root) {
        
        Stack<TreeNode> stack = new Stack<>();
        int sum = 0;
        TreeNode node = root;
        while(!stack.isEmpty() || node != null) {
            while(node != null) {
                stack.add(node);
                node = node.right;
            }
            
            node = stack.pop();
            node.val += sum;
            sum = node.val;
            node = node.left;
        }
        return root;
    }

 

  方法二、

    ① 采用一个全局变量,统计遍历的节点值之和。

    ② 采用递归方式进行二叉树遍历。

  

    int sum = 0;
    public TreeNode convertBST(TreeNode root) {
        if(root == null)
            return null;
        convertBST(root.right);
        root.val += sum;
        sum = root.val;
        convertBST(root.left);
        return root;
    }

 

    

以上是关于538. Convert BST to Greater Tree的主要内容,如果未能解决你的问题,请参考以下文章

538. Convert BST to Greater Tree

538. Convert BST to Greater Tree

538. Convert BST to Greater Tree

538. Convert BST to Greater Tree

Leetcode 538. Convert BST to Greater Tree

[LeetCode] 538. Convert BST to Greater Tree