二叉搜索树的后序遍历序列(二叉搜索树的应用)

来源:互联网 发布:淘宝售后安装平台接单 编辑:程序博客网 时间:2024/06/11 05:13

题目描述

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


二叉搜索树满足左孩子的每一个结点都小于根结点,右孩子的每一个结点都大于根结点。

由于是后序遍历,所以根结点在最后的位置。

获取到根结点,通过根结点把左子树和右子树分开,如果左子树和右子树的每个结点的值都满足二叉搜索树的条件(左孩子的每一个结点都小于根结点,右孩子的每一个结点都大于根结点)的话,则进行遍历,否则返回False。

# -*- coding:utf-8 -*-class Solution:    def VerifySquenceOfBST(self, sequence):        # write code here        if not sequence:        return False        # 获取根节点        root = sequence[-1]        # 根据二叉搜索树的性质,左孩子的每个结点的值都小于根节点        for i in range(len(sequence)):        if sequence[i] > root:        break        # 判断是否右孩子的每个结点的值都大于根结点        for j in range(i, len(sequence)):        if sequence[j] < root:        return False        left = True        # i > 0 的时候证明有左孩子        if i > 0:        # 递归遍历左孩子        left = self.VerifySquenceOfBST(sequence[ : i])        right = True        # 证明有右孩子,通过i的值不在最后一个结点判断,len(sequence) - 1 为sequence的最后一个结点        if i < len(sequence) - 1:        right = self.VerifySquenceOfBST(sequence[i : -1])        return left and right


0 0