《剑指offer》二叉搜索树的后序遍历序列

OJ address

剑指Offer : 二叉搜索树的后序遍历序列

Description

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

Solution in Python

# -*- coding:utf-8 -*-
class Solution:
    def VerifySquenceOfBST(self, sequence):
        length = len(sequence)
        if length == 0:
            return False
        if length == 1:
            return True
        str = sequence[-1]
        i = 0
        while sequence[i] < str:
            i+=1
        for x in xrange(i, length-1):
            if sequence[x] < str:
                return False 
        a = True
        b = True
        if len(sequence[:i])>0:
            a = self.VerifySquenceOfBST(sequence[:i])
        if len(sequence[i:length-1])>0:
            b = self.VerifySquenceOfBST(sequence[i:length-1])
        return a and b

My Idea

知道二叉搜索树的定义就很容易做了

  1. 根据后序遍历的定义,如果一个序列是二叉树的后续遍历的结果,那么我们不难得出,序列的最后一个节点必定是二叉树的根节点,除了根节点外,序列中前一部分是二叉树的左子树的节点,后面一部分是二叉树的右子树的节点。
  2. 若左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  3. 若右子树不空,则右子树上所有结点的值均大于它的根结点的值;
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容