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.
样例
Given a binary search Tree `{5,2,3}`:
5
/ \
2 13
Return the root of new tree
18
/ \
20 13
思路:
先遍历右子树,再遍历左子树。
"""
Definition of TreeNode:
class TreeNode:
def __init__(self, val):
self.val = val
self.left, self.right = None, None
"""
class Solution:
# @param {TreeNode} root the root of binary tree
# @return {TreeNode} the new root
def traverseTree(self, root, prenum):
if root.left == None and root.right == None:
tmp = root.val
root.val += prenum
return tmp
leftnum = 0
rightnum = 0
tmp = root.val
if root.right != None:
rightnum = self.traverseTree(root.right, prenum)
root.val += (rightnum + prenum)
if root.left != None:
leftnum = self.traverseTree(root.left, root.val)
return tmp + leftnum + rightnum
def convertBST(self, root):
# Write your code here
if root == None:
return root
rightnum = 0
if root.right != None:
rightnum = self.traverseTree(root.right, 0)
root.val += rightnum
if root.left != None:
self.traverseTree(root.left, root.val)
return root