• 剑指offer二叉搜索树的后序遍历python


    题目描述

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

    思路

    后序遍历即先左右子,再根节点。所以我们可以先判断数组的最后一个元素是不是等于root,接下来要做的事情就是在数组中划分左右子。把左子数组和右子数组分别重复刚才的过程即可。

    因为是二叉搜索树,根节点的左子都会小于根节点的值,所以将数组从前向后扫, 判断是不是存在一个临界点,临界点前面的数字全部小于根节点,临界点后面的数字全部大于根节点。然后将分段的子数组重新重复判断过程。

    代码

    # -*- coding:utf-8 -*-
    class Solution:
        def VerifySquenceOfBST(self, sequence):
            if not sequence:
                return False
            root = sequence[-1]
            split = len(sequence) - 1
            for i in range(0,len(sequence) - 1):
                if sequence[i] >= root: 
                    split = i
                    break
            #找到第一个大于等于root的
            for i in range(split, len(sequence) - 1):
                if sequence[i] < root: #
                    return False
            left = True
            if split > 0:
                left = self.VerifySquenceOfBST(sequence[0:split])
            right = True
            if split < len(sequence) - 1:
                right = self.VerifySquenceOfBST(sequence[split:len(sequence) - 1])
            return left and right

     

  • 相关阅读:
    Markdown标签
    macbook使用
    git的使用
    HTTPS的原理
    javascript中的对象
    javascript中this的指向问题
    javascript中的闭包
    javaScript中的return、break和continue
    Promise对象
    ORACLE_11G归档空间满,由于数据库装完后使用的是默认空间是闪回区
  • 原文地址:https://www.cnblogs.com/wangzhihang/p/11792772.html
Copyright © 2020-2023  润新知