zoukankan      html  css  js  c++  java
  • 【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
  • 相关阅读:
    [BZOJ]1042 硬币购物(HAOI2008)
    [Codeforces]605E Intergalaxy Trips
    [Codeforces]860E Arkady and a Nobody-men
    [Codeforces]856E Satellites
    [Codeforces]849E Goodbye Souvenir
    [Codeforces]852I Dating
    [BZOJ]1095 Hide捉迷藏(ZJOI2007)
    洛谷3275 & BZOJ2330:[SCOI2011]糖果——题解
    洛谷5960:【模板】差分约束算法——题解
    The Preliminary Contest for ICPC Asia Nanjing 2019/2019南京网络赛——题解
  • 原文地址:https://www.cnblogs.com/seyjs/p/11026162.html
Copyright © 2011-2022 走看看