forked from qiyuangong/leetcode
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path538_Convert_BST_to_Greater_Tree.java
39 lines (33 loc) · 1.07 KB
/
538_Convert_BST_to_Greater_Tree.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class Solution {
// https://leetcode.com/problems/convert-bst-to-greater-tree/solution/
// private int sum = 0;
// public TreeNode convertBST(TreeNode root) {
// if (root != null) {
// convertBST(root.right);
// sum += root.val;
// root.val = sum;
// convertBST(root.left);
// }
// return root;
// }
public TreeNode convertBST(TreeNode root) {
int sum = 0;
TreeNode node = root;
Stack<TreeNode> stack = new Stack<TreeNode>();
while (!stack.isEmpty() || node != null) {
/* push all nodes up to (and including) this subtree's maximum on
* the stack. */
while (node != null) {
stack.add(node);
node = node.right;
}
node = stack.pop();
sum += node.val;
node.val = sum;
/* all nodes with values between the current and its parent lie in
* the left subtree. */
node = node.left;
}
return root;
}
}