LintCode 661 Convert BST to Greater Tree

来源:互联网 发布:网络短信发送平台 编辑:程序博客网 时间:2024/06/03 20:50

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                


原创粉丝点击