leetcode538 把二叉搜索树转换为累加树(递归与非递归两种实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/u012343179/article/details/89853991