zoukankan      html  css  js  c++  java
  • 【剑指Offer】23二叉搜索树的后序遍历序列

    题目描述

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

    时间限制:1秒;空间限制:32768K

    解题思路

    BST后序遍历的特点是:

    大小:L树 < Root <R树

    排序:L树 -- R树 -- Root

    因此如果一个序列是合法的BST的后序序列,那么满足以下条件:

    1、最后一个元素是根节点root

    2、root前面的序列可以分为两段:前一段序列是左子树,值都小于root值;后一段序列是右子树,值都大于root值

    3、这两段序列也都是合法的BST的后序序列

    可以用递归的思路求解本题,Python代码:

    # -*- coding:utf-8 -*-
    class Solution:
        def VerifySquenceOfBST(self, sequence):
            # write code here
            if sequence == None or sequence == []:
                return False
            root = sequence[-1]
            length = len(sequence)
            # 在二叉搜索树中左子树节点小于根节点
            for i in range(length):
                if sequence[i]>root:
                    break
            # 二叉搜索树中右子树的节点都大于根节点
            for j in range(i,length-1):
                if sequence[j]<=root:
                    return False
            # 判断左子树是否为二叉树
            left = True
            if  i>0:
                left = self.VerifySquenceOfBST(sequence[0:i])
            # 判断右子树是否为二叉树
            right = True
            if i<length-1:
                right = self.VerifySquenceOfBST(sequence[i:-1])
            # 当左右两子树都返回True的时候,结果才是True
            return left and right
  • 相关阅读:
    mtu
    OC2_使用系统协议
    OC1_协议语句
    Json文件/网址解析
    文件归档
    Plist文件
    NS-Date/NSDateFormatter
    OC10_文件练习
    OC9_文件操作
    OC8_NSData
  • 原文地址:https://www.cnblogs.com/yucen/p/9912037.html
Copyright © 2011-2022 走看看