leetcode1038. Binary Search Tree to Greater Sum Tree

Posted seyjs

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode1038. 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

 

以上是关于leetcode1038. Binary Search Tree to Greater Sum Tree的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode动画 | 1038. 从二叉搜索树到更大和树

[LeetCode226]Invert Binary Tree

Leetcode[110]-Balanced Binary Tree

LeetCode 110. Balanced Binary Tree 递归求解

[LeetCode]题解(python):110 Balanced Binary Tree

[Leetcode] Binary tree -- 617. Merge Two Binary Trees