給出二叉搜索樹的根節點,該二叉樹的節點值各不相同,修改二叉樹,使每個節點 node 的新值等於原樹中大於或等於 node.val 的值之和。
提醒一下,二叉搜索樹滿足下列約束條件:
節點的左子樹僅包含鍵小於節點鍵的節點。
節點的右子樹僅包含鍵大於節點鍵的節點。
左右子樹也必須是二叉搜索樹。
示例:
輸入:[4,1,6,0,2,5,7,null,null,null,3,null,null,null,8]
輸出:[30,36,21,36,35,26,15,null,null,null,33,null,null,null,8]
提示:
樹中的節點數介於 1 和 100 之間。
每個節點的值介於 0 和 100 之間。
給定的樹爲二叉搜索樹。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-search-tree-to-greater-sum-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
15:47~ 16:07
思路:由於是排序好的二叉樹,只用算出和之後每次便利時減去最小的給入即可:
如下是我代碼:
# 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):
def sortkey(self, node,m_list):
if node.left != None:
self.sortkey(node.left,m_list)
m_list.append(node.val)
if node.right != None:
self.sortkey(node.right,m_list)
def resetkey(self,node):
if node.left != None:
self.resetkey(node.left)
tmp = node.val
node.val = self.m_sum
self.m_sum -= tmp
if node.right != None:
self.resetkey(node.right)
def bstToGst(self, root):
"""
:type root: TreeNode
:rtype: TreeNode
"""
m_list = []
self.sortkey(root,m_list)
self.m_sum = sum(m_list)
self.resetkey(root)
return root