【leetcode】1038. Binary Search Tree to Greater Sum Tree

题目如下:

Given the root of a binary search tree with distinct values, modify it so that every node has a new value equal to the sum of the values of the original tree that are greater than or equal to node.val.

As a reminder, a binary search tree is a tree that satisfies these constraints:

  • The left subtree of a node contains only nodes with keys less than the node's key.
  • The right subtree of a node contains only nodes with keys greater than the node's key.
  • Both the left and right subtrees must also be binary search trees.

 

Example 1:

Input: [4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
Output: [30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]

 

Note:

  1. The number of nodes in the tree is between 1 and 100.
  2. Each node will have value between 0 and 100.
  3. The given tree is a binary search tree.

解题思路:我的方法简单粗暴,第一次遍历树,把树中每个节点的值存入list;接下来再遍历一次,对于每个node,在list中找出所有值比自己大的元素的和,加上node自身的值,即为这个node的新值。

代码如下:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    val_list = []
    def recursive(self,node):
        self.val_list.append(node.val)
        if node.right != None:
            self.recursive(node.right)
        if node.left != None:
            self.recursive(node.left)

    def reValue(self,node):
        inx = self.val_list.index(node.val)
        node.val += sum(self.val_list[inx+1:])
        if node.right != None:
            self.reValue(node.right)
        if node.left != None:
            self.reValue(node.left)

    def bstToGst(self, root):
        """
        :type root: TreeNode
        :rtype: TreeNode
        """
        if root != None:
            self.val_list = []
            self.recursive(root)
            self.val_list.sort()
            self.reValue(root)
        return root

 

posted @ 2019-06-15 06:18  seyjs  阅读(423)  评论(0编辑  收藏  举报