LeetCode 538. 把二叉搜索树转换为累加树

题目

给出二叉搜索树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 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]

方法:递归

__ init __ 函数:

  • pre 表示此时节点的前一个节点

convertBST 函数:

  • 调用 traversal 函数,进行遍历

traversal 函数:右中左遍历二叉树

  • 若节点为空,则返回 None
  • 根据二叉搜索树和累加树的定义可知,最右测的节点的值为其自身值,而最左侧节点的值为整棵树所有节点值的和。若将该二叉搜索树的所有节点值按顺序放入一个数组的话,每个节点的新节点值为其后一个节点值加上自身的节点值。所以此处先遍历右侧后中间最后左侧
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def __init__(self):
        self.pre = TreeNode()

    def convertBST(self, root):
        self.traversal(root)
        return root
        
    def traversal(self, node):
        if not node:
            return None
        
        self.traversal(node.right)

        node.val += self.pre.val
        self.pre = node

        self.traversal(node.left)
参考

代码相关:https://programmercarl.com/0538.%E6%8A%8A%E4%BA%8C%E5%8F%89%E6%90%9C%E7%B4%A2%E6%A0%91%E8%BD%AC%E6%8D%A2%E4%B8%BA%E7%B4%AF%E5%8A%A0%E6%A0%91.html

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容