diff --git a/problems/0538.把二叉搜索树转换为累加树.md b/problems/0538.把二叉搜索树转换为累加树.md index f2b97989..6de98c6f 100644 --- a/problems/0538.把二叉搜索树转换为累加树.md +++ b/problems/0538.把二叉搜索树转换为累加树.md @@ -196,20 +196,40 @@ class Solution { ``` ## Python +**递归** -递归法 -```python +```python3 +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right class Solution: - def convertBST(self, root: TreeNode) -> TreeNode: - def buildalist(root): - if not root: return None - buildalist(root.right) #右中左遍历 - root.val += self.pre - self.pre = root.val - buildalist(root.left) - self.pre = 0 #记录前一个节点的数值 - buildalist(root) + def __init__(self): + self.pre = TreeNode() + + def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]: + ''' + 倒序累加替换: + [2, 5, 13] -> [[2]+[1]+[0], [2]+[1], [2]] -> [20, 18, 13] + ''' + self.traversal(root) return root + + def traversal(self, root: TreeNode) -> None: + # 因为要遍历整棵树,所以递归函数不需要返回值 + # Base Case + if not root: + return None + # 单层递归逻辑:中序遍历的反译 - 右中左 + self.traversal(root.right) # 右 + + # 中节点:用当前root的值加上pre的值 + root.val += self.pre.val # 中 + self.pre = root + + self.traversal(root.left) # 左 ``` ## Go