【Leetcode_总结】 938. 二叉搜索树的范围和 - python

Q:

给定二叉搜索树的根结点 root,返回 L 和 R(含)之间的所有结点的值的和。

二叉搜索树保证具有唯一的值。

示例 1:

输入:root = [10,5,15,3,7,null,18], L = 7, R = 15
输出:32

示例 2:

输入:root = [10,5,15,3,7,13,18,1,null,6], L = 6, R = 10
输出:23

链接:https://leetcode-cn.com/problems/range-sum-of-bst/description/

思路:前序遍历二叉树,如果值在L R之间,就相加

代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def rangeSumBST(self, root, L, R):
        """
        :type root: TreeNode
        :type L: int
        :type R: int
        :rtype: int
        """
        result, stack = 0, [root]
        while stack:
            node = stack.pop()
            if node:
                if L <= node.val <= R:
                    result += node.val
                if node.val < R:
                    stack.append(node.right)
                if L < node.val:
                    stack.append(node.left)          
        return result


另一种方法是中序遍历,然后返回L,R之间的和

代码:

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def rangeSumBST(self, root, L, R):
        """
        :type root: TreeNode
        :type L: int
        :type R: int
        :rtype: int
        """
        if root == None:
            return []
        else:
            res = []
            self.middle_digui(root, res)
        return (sum(res[res.index(L):res.index(R)+1]))

    def middle_digui(self,root,res):
        if root == None:
            return
        self.middle_digui(root.left,res)
        res.append(root.val)
        self.middle_digui(root.right,res)

猜你喜欢

转载自blog.csdn.net/maka_uir/article/details/86622350