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

Topics are as follows:

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.

Problem-solving ideas: My method is simple and crude, the first to traverse the tree, the tree, the value of each node is stored in the list; the next traverse once again, for each node, to find all the value is greater than themselves in the list and elements, plus the value of the node itself, that is, the new node's value.

code show as below:

# 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

 

Guess you like

Origin www.cnblogs.com/seyjs/p/11026162.html