二叉搜索树

一、题目:二叉搜索树的后序遍历序列

题目描述

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

思路:

  二叉搜索树:根节点 > 左子树 and  根节点 < 右子树

  后序遍历:左、右、根

  后序遍历的二叉搜索树【左(小)、右(大)、根节点】

  找到右节点所在位置 mid ,然后递归判断 【左】是不是二叉搜索树、【右】是不是二叉搜索树

  代码:

  

    def VerifySquenceOfBST(self, sequence):
        # write code here
        if not sequence:
            return False
        def helper(sequence):
            if len(sequence) <= 2:
                return True
            head = sequence[-1]
            mid = 0
            for i,s in enumerate(sequence):
                if s > head:
                    mid = i
                    break
                elif i == len(sequence) - 1 and s == head:
                    mid = i
            for i in range(mid):
                if sequence[i] > head:
                    return False
            for i in range(mid,len(sequence)):
                if sequence[i] < head:
                    return False
            return helper(sequence[:mid]) and helper(sequence[mid:len(sequence)-1])
        return helper(sequence)

 

posted on 2019-04-03 17:19  吱吱了了  阅读(149)  评论(0编辑  收藏  举报

导航