• LeetCode Convert BST to Greater Tree


    原题链接在这里:https://leetcode.com/problems/convert-bst-to-greater-tree/description/

    题目:

    Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST.

    Example:

    Input: The root of a Binary Search Tree like this:
                  5
                /   
               2     13
    
    Output: The root of a Greater Tree like this:
                 18
                /   
              20     13

    题解:

    反着inorder走, 右中左, 更新sum.

    Time Complexity: O(n), node数.

    Space: O(logn), stack space.

    AC Java:

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     
    12     int sum = 0;
    13     
    14     public TreeNode convertBST(TreeNode root) {
    15         reverseInorder(root);
    16         return root;
    17     }
    18     
    19     private void reverseInorder(TreeNode root){
    20         if(root == null){
    21             return;
    22         }
    23         
    24         reverseInorder(root.right);
    25         root.val += sum;
    26         sum = root.val;
    27         reverseInorder(root.left);
    28     }
    29 }

    Iteration做法. 

    Time Complexity: O(n). Space: O(logn).

    AC Java: 

     1 /**
     2  * Definition for a binary tree node.
     3  * public class TreeNode {
     4  *     int val;
     5  *     TreeNode left;
     6  *     TreeNode right;
     7  *     TreeNode(int x) { val = x; }
     8  * }
     9  */
    10 class Solution {
    11     public TreeNode convertBST(TreeNode root) {
    12         int sum = 0;
    13         Stack<TreeNode> stk = new Stack<TreeNode>();
    14         TreeNode cur = root;
    15         
    16         while(!stk.isEmpty() || cur!=null){
    17             if(cur != null){
    18                 stk.push(cur);
    19                 cur = cur.right;
    20             }else{
    21                 cur = stk.pop();
    22                 sum += cur.val;
    23                 cur.val = sum;
    24                 cur = cur.left;
    25             }
    26         }
    27         return root;
    28     }
    29 }
  • 相关阅读:
    数据库的初始创建
    组合总和 II (Leetcode 暴力)
    Leetcode 最大正方形(两种解法)
    Python PyAPNs 实现消息推送
    Windows下nginx+web.py+fastcgi服务搭建
    Python学习预备
    《Effective C++》笔记:IV
    《Effective C++》笔记:III
    《Effective C++》笔记:II
    《Effective C++》笔记:I
  • 原文地址:https://www.cnblogs.com/Dylan-Java-NYC/p/7514423.html
Copyright © 2020-2023  润新知