• 剑指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

     

  • 相关阅读:
    R语言中的logical(0)和numeric(0)以及赋值问题
    创建hadoop用户
    虚拟机安装
    spark1-MapReduce
    arcgis1-shp转成mdb
    Actor-配置Maven
    scala6-单词计数(map(),flatMap())
    scala5-数组
    scala4-函数
    scala3-for循环
  • 原文地址:https://www.cnblogs.com/wangzhihang/p/11792772.html
Copyright © 2020-2023  润新知