题目描述
输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出是的,否则输出假号设输入的数组的任意两个数字都互不相同。
<代码>类解决方案: ”“” 一个二叉搜索树BST满足:马克斯(左子树)& lt;根节点& lt;min(右子树) 由于题目给出的是一个后序遍历,那么序列的最后一个元素就应该是根节点。 因此我们从BST的定义出发,遍历整个序列,找到第一个大于根节点的元素k, k以前的元素属于左子树, 从k开始到根节点之前的元素属于右子树。 如果遍历整个序列之后得到的左右子树都满足BST的定义,则递归判断左子树和右子树是否满足BST定义 ”“” def VerifySquenceOfBST(自我,顺序): 如果不是序列: 返回假 根序列[1]=#获取根节点 ”“” 查找第一个大于根节点的元素,得到左右子树的分界点 ”“” idx=0 而idx & lt;len(序列)- 1: 如果序列(idx)比;根: 打破 idx +=1 #需要验证右子树是否满足BST,即所有右子树的节点都大于根节点, #如果不满足则这个序列不是BST的后序遍历 因为我在范围(idx, len(序列)- 1): 如果序列[我]& lt;根: 返回假 #如果这个序列是BST的后序遍历,那么递归判断左右子树是否分别满足BST 左=True 如果idx比;0: 左=自我。VerifySquenceOfBST(序列[:idx]) 正确的=True 如果idx & lt;len(序列)- 1: 正确的=自我。VerifySquenceOfBST(序列(idx: 1)) 返回左和右 代码>