题解 | #二叉搜索树的后序遍历序列#

二叉搜索树的后序遍历序列

https://www.nowcoder.com/practice/a861533d45854474ac791d90e447bafd

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param sequence int整型一维数组 
# @return bool布尔型
#
class Solution:
    def VerifySquenceOfBST(self , sequence: List[int]) -> bool:
        # write code here
        # 先判空
        if not sequence:
            return False
        # 找出后序遍历的根节点
        len_list = len(sequence)
        root = sequence[len_list-1]
        index = 0
        # 找出左右子树的右子树分界节点
        for i in range(len_list):
            # 注意边界条件,是大于等于 都可以是右子树
            if sequence[i]>=root:
                index = i
                break
        # 判读分界点右边是否满足二叉搜索树的条件,即右子树全大于等于根节点
        # 注意这里不能
        for i in range(index, len_list):
            if sequence[i]<root:
                return False
        
        # 使用一个flag判断左右子树是否满足,分割的只去除根节点,index要包含进去
        # 注意index是不是首个或者倒数第二个元素,如果是则不要分割
        f_left = True
        if index>0:
            # 要记得在if中更新标志的状态
            f_left = self.VerifySquenceOfBST(sequence[:index])
        f_right =True
        if index < len_list-1:
            f_right = self.VerifySquenceOfBST(sequence[index:-1])
        return f_left and f_right


根节点就是数组的最后一位,所以

  • 第一步:找到数组最后一位,即根节点root。紧接着
  • 第二步:获取整个数组的长度,开始遍历并与root值比较,第一个大于root的值就是左右子树的分界点
  • 第三步:遍历右子树,验证是否符合二叉搜索树的概念;如上图,以12为分界点的右边所有节点都是大于root的,所以是符合二叉搜索树的。
  • 第四步:继续往下递归,查看余下的左右子树是否符合
剑指offer刷题笔记 文章被收录于专栏

24秋招剑指offer刷题的笔记

全部评论

相关推荐

牛客771574427号:恭喜你,华杰
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务