版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012343179/article/details/89853991
右根左的遍历方式,不断累加即可。
递归实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def __init__(self):
self.pre_sum=0
def convertBST(self, root: TreeNode) -> TreeNode:
# 递归写法
if root==None:
return
self.convertBST(root.right)
root.val+=self.pre_sum
self.pre_sum=root.val
self.convertBST(root.left)
return root
非递归实现:
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def convertBST(self, root: TreeNode) -> TreeNode:
# 非递归
stack=[]
p=root
pre_sum=0
while p or len(stack)>0:
if p:
stack.append(p)
p=p.right
else:
p=stack.pop()
p.val+=pre_sum
pre_sum=p.val
p=p.left
return root