剑指offer:Python 判断是否是二叉搜索树的后序遍历序列结果

题目描述

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。

思路及Python实现

  • 什么是二叉搜索树?
    二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树:
    (1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
    (2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
    (3)它的左、右子树也分别为二叉排序树。
    在这里插入图片描述
  • 回到题意,如果是后序遍历的结果,那说明数组最后一个的值必定是根root结点,而且后序遍历是按照:[左子树的值,右子树的值,root]排序的,根据BST的性质,左子树的值都要<root;右子树的值>root
  • 做法:从数组左侧向右找,找到比root值大的位置,将左子树的值,右子树的值区分开,再用递归完成下一子规模查找
class Solution:
    def VerifySquenceOfBST(self, sequence):
        if sequence == []:
            return False
        root_val = sequence.pop()
        # root_val = sequence[-1]
        # del sequence[-1]
        pos = None
        for i in range(len(sequence)):
            if pos == None and root_val < sequence[i]:
                pos = i
            if pos != None and root_val > sequence[i]:
                return False
        if sequence[:pos] == []:
            left_ret = True
        else:
            left_ret = self.VerifySquenceOfBST(sequence[:pos])
        if sequence[pos:] == []:
            right_ret = True
        else:
            right_ret = self.VerifySquenceOfBST(sequence[pos:])
        return left_ret and right_ret
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值