class Solution:
def __init__(self):
self.sum = 0
def convertBST(self, root: TreeNode) -> TreeNode:
if not root:
return root
self.convertBST(root.right)
self.total += root.val
root.val = self.total
self.convertBST(root.left)
return root
func convertBST(root *TreeNode) *TreeNode {
if root != nil {
dfs(root, 0)
}
return root
}
func dfs(node *TreeNode, sum int) int {
if node == nil {
return sum
}
sum = dfs(node.Right, sum)
node.Val += sum
sum = node.Val
sum = dfs(node.Left, sum)
return sum
}
class Solution:
def convertBST(self, root: TreeNode) -> TreeNode:
if not root:
return root
prev = 0
stack = [(False, root)]
while stack:
visited, node = stack.pop()
if visited:
node.val += prev
prev = node.val
else:
if node.left:
stack.append((False, node.left))
stack.append((True, node))
if node.right:
stack.append((False, node.right))
return root
var convertBST = function(root) {
if (!root) {
return root
}
let stack = [
[false, root]
]
let sum = 0
while (stack.length > 0) {
let [visited, node] = stack.pop()
if (visited) {
node.val += sum
sum = node.val
} else {
if (node.left) {
stack.push([false, node.left])
}
stack.push([true, node])
if (node.right) {
stack.push([false, node.right])
}
}
}
return root
};