zoukankan      html  css  js  c++  java
  • 剑指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

     

  • 相关阅读:
    AcWing 900. 整数划分
    AcWing 913. 排队打水
    AcWing 897. 最长公共子序列
    AcWing 895. 最长上升子序列
    AcWing 902. 最短编辑距离
    AcWing 338. 计数问题
    AcWing 896. 最长上升子序列 II
    AcWing 779. 最长公共字符串后缀
    AcWing 282. 石子合并
    ASP.NET里常用的JS (转贴)
  • 原文地址:https://www.cnblogs.com/wangzhihang/p/11792772.html
Copyright © 2011-2022 走看看