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 tonode.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:
- The number of nodes in the tree is between
1
and100
.- Each node will have value between
0
and100
.- 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 递归求解