538. Convert BST to Greater Tree

1、題目node

  一、審題spa

  

  

  二、分析code

    給出一棵二叉搜索樹。將全部節點值加上比他大的全部節點值。blog

 

2、解答遞歸

  思路:class

    採用相似中序(左-->根-->右)遍歷的方式。實際採用 (右--> 根 --> 左)。遍歷時,統計全部遍歷的節點之和。變量

 

  方法1、二叉樹

    採用一個 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;
    }

 

  方法2、遍歷

    ① 採用一個全局變量,統計遍歷的節點值之和。

    ② 採用遞歸方式進行二叉樹遍歷。

  

    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;
    }
相關文章
相關標籤/搜索