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