leedcode-1038從二叉搜索樹到更大的樹

給出二叉搜索樹的根節點,該二叉樹的節點值各不相同,修改二叉樹,使每個節點 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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章