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 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.
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