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

  

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

  
 <代码>类解决方案:
  ”“”
  一个二叉搜索树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))
  
  返回左和右
   

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