Skip to content

Commit b38880b

Browse files
authored
Update 0538.把二叉搜索树转换为累加树.md
补充python注释
1 parent b5dcc55 commit b38880b

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

problems/0538.把二叉搜索树转换为累加树.md

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -196,20 +196,40 @@ class Solution {
196196
```
197197

198198
## Python
199-
200-
递归法
201-
```python
199+
**递归**
200+
201+
```python3
202+
# Definition for a binary tree node.
203+
# class TreeNode:
204+
# def __init__(self, val=0, left=None, right=None):
205+
# self.val = val
206+
# self.left = left
207+
# self.right = right
202208
class Solution:
203-
def convertBST(self, root: TreeNode) -> TreeNode:
204-
def buildalist(root):
205-
if not root: return None
206-
buildalist(root.right) #右中左遍历
207-
root.val += self.pre
208-
self.pre = root.val
209-
buildalist(root.left)
210-
self.pre = 0 #记录前一个节点的数值
211-
buildalist(root)
209+
def __init__(self):
210+
self.pre = TreeNode()
211+
212+
def convertBST(self, root: Optional[TreeNode]) -> Optional[TreeNode]:
213+
'''
214+
倒序累加替换:
215+
[2, 5, 13] -> [[2]+[1]+[0], [2]+[1], [2]] -> [20, 18, 13]
216+
'''
217+
self.traversal(root)
212218
return root
219+
220+
def traversal(self, root: TreeNode) -> None:
221+
# 因为要遍历整棵树,所以递归函数不需要返回值
222+
# Base Case
223+
if not root:
224+
return None
225+
# 单层递归逻辑:中序遍历的反译 - 右中左
226+
self.traversal(root.right) #
227+
228+
# 中节点:用当前root的值加上pre的值
229+
root.val += self.pre.val #
230+
self.pre = root
231+
232+
self.traversal(root.left) #
213233
```
214234

215235
## Go

0 commit comments

Comments
 (0)