From b38880b2fdd6f99312811e759a25082be0c48ef0 Mon Sep 17 00:00:00 2001 From: Asterisk <44215173+casnz1601@users.noreply.github.com> Date: Sun, 10 Oct 2021 12:26:42 +0800 Subject: [PATCH] =?UTF-8?q?Update=200538.=E6=8A=8A=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E6=A0=91=E8=BD=AC=E6=8D=A2=E4=B8=BA=E7=B4=AF?= =?UTF-8?q?=E5=8A=A0=E6=A0=91.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 补充python注释 --- ...38.把二叉搜索树转换为累加树.md | 42 ++++++++++++++----- 1 file changed, 31 insertions(+), 11 deletions(-) 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