538 Convert BST to Greater Tree
538. Convert BST to Greater Tree
1. Question
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
2. Implementation
(1) Recursion
思路:首先处理right children, 然后当前的node,最后才是leftChildren,维护一个变量sum记录当前所得到的和。
class Solution {
public TreeNode convertBST(TreeNode root) {
getSum(root, 0);
return root;
}
public int getSum(TreeNode node, int sum) {
if (node == null) {
return sum;
}
int rightSum = getSum(node.right, sum);
node.val += rightSum;
int leftSum = getSum(node.left, node.val);
return leftSum;
}
}
(2) Iteration
思路:迭代的做法和inorder traversal很像,不同在于我们先从right children遍历,然后是当前的node, 最后才是left children,和inorder traversal正好相反
class Solution {
public TreeNode convertBST(TreeNode root) {
if (root == null) {
return null;
}
Stack<TreeNode> stack = new Stack<>();
int sum = 0;
TreeNode curNode = root;
while (curNode != null || !stack.isEmpty()) {
if (curNode != null) {
stack.push(curNode);
curNode = curNode.right;
}
else {
curNode = stack.pop();
curNode.val += sum;
sum = curNode.val;
curNode = curNode.left;
}
}
return root;
}
}
3. Time & Space Complexity
Recursion: 时间复杂度:O(n), 空间复杂度:O(h), h为树的高度
Iteration: 时间复杂度: O(n), 空间复杂度: O(n)
Last updated
Was this helpful?