LeetCode 538. 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 }