zoukankan      html  css  js  c++  java
  • 剑指offer 二叉搜索树的后序遍历序列 python

    题目描述

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

    样例

    [1,2,3,4,5] 
    true
    [1,2,3,6,4,5]
    false
    

    想法一:
    使用递归方法,每次取出最后一个元素,即为root,遍历所有节点,找出左子树和右子树,再分别使用该方法进行查找。

    class Solution:
        def VerifySquenceOfBST(self, sequence):
            if sequence == []:
                return False
            if len(sequence) == 1 or len(sequence) == 2:
                return True
            else:
                root = sequence.pop(-1)
                sign = 0
                note = 0
                flag = 0
                for i in range(len(sequence)):
                    if sign is 0 and sequence[i] > root:
                        note = i
                        sign = -1
                    if sequence[i] > root:
                        sign = 1
                        flag += 1
                    if (sign == 1) and (sequence[i] < root):
                        return False
                if sign is 0:
                    note = i
                if flag == len(sequence):
                    note = 1
                return self.VerifySquenceOfBST(sequence[:note]) and self.VerifySquenceOfBST(sequence[note:])
    

    想法二:
    讨论区看到了相似的解法,不通过判断左右子树,直接无脑递归序列,如果出现了不合法序列,即右子树中小于root,返回false,其他情况直接序列减一继续递归。

    class Solution:
        def VerifySquenceOfBST(self, sequence):
            if sequence == []:
                return False
            if len(sequence) == 1 or len(sequence) == 2:
                return True
            else:
                root = sequence.pop(-1)
                sign = 0
                for i in range(len(sequence)):
                    if sequence[i] > root:
                        sign = 1
                    if (sign == 1) and (sequence[i] < root):
                        return False
                return self.VerifySquenceOfBST(sequence[:i]) and self.VerifySquenceOfBST(sequence[i:])
    

    最后

    刷过的LeetCode或剑指offer源码放在Github上了,希望喜欢或者觉得有用的朋友点个star或者follow。
    有任何问题可以在下面评论或者通过私信或联系方式找我。
    联系方式
    QQ:791034063
    Wechat:liuyuhang791034063
    CSDN:https://blog.csdn.net/Sun_White_Boy
    Github:https://github.com/liuyuhang791034063

  • 相关阅读:
    关于 No buffer space available (maximum connections reached?): connect 的处理
    Cron 表达式
    Hudson 打包部署到Was上特别慢
    JAVA jar 参数
    CentOS 6 UNEXPECTED INCONSISTENCY RUN fsck MANUALLY
    SSH 连接很慢
    解决libc.so.6: version `GLIBC_2.14&#39; not found问题
    Maven 基本参数
    Shc 应用
    JAVA 关于JNI本地库加载
  • 原文地址:https://www.cnblogs.com/GF66/p/9785464.html
Copyright © 2011-2022 走看看