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

 

原文地址:https://www.cnblogs.com/wangzhihang/p/11792772.html