收藏:①极市开发DeepLearning ②Git使用

剑指offer-23

题目描述

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

本题是利用递归思想,判断根节点的左子树元素是否小于根节点,右子树元素是否大于根节点。重点在于对左右子树的划分(因为传入的是个数组)

1.从第0位开始,找到第一位比根节点大的元素,记录此位置i。在此位置之前都属于左子树(此时已经断定左子树都小于根节点) 
2.检查右子树是否都大于跟节点(从第i位开始,到根节点前) 
3.判断左右子树是否都属于二叉搜索树

 1 class Solution:
 2     def VerifySquenceOfBST(self, sequence):
 3         # write code here
 4         if sequence == []:
 5             return None
 6         if len(sequence) == 1:
 7             return True
 8         for i in range(len(sequence)-1):
 9             if sequence[i] > sequence[-1]:
10                 break
11         for j in range(i+1, len(sequence)-1):
12             if sequence[j] < sequence[-1]:
13                 return False
14         left_BST = sequence[:i]
15         right_BST = sequence[i:-1]
16         if left_BST and right_BST:
17             return self.VerifySquenceOfBST(left_BST) and self.VerifySquenceOfBST(right_BST)
18         elif left_BST:
19             return self.VerifySquenceOfBST(left_BST)
20         else:
21             return self.VerifySquenceOfBST(right_BST)

 

 

posted @ 2019-05-07 15:08  WSX_1994  阅读(151)  评论(0)    收藏  举报