递归求解
基础认识
1. 后续遍历
序列的最后一位就是根节点
2. 搜索树
所有左子树节点都比根节点小,右子树反之。
思路方法
综合上述特点,利用递归方法,递归出口就是当子树只有一个节点时返回TRUE。递归体的构建是,在遍历序列时,遇到的第一个大于根节点的数就是右子树的起点,这样我们得到了左右子树,在遍历的时候判断左子树是否都小于根节点,右子树是否都大于根节点,判断指针位置是否如我们设想的那样遍历完了整个序列。之后就是对左右子树进行递归。
代码实现
class Solution:
def verifyPostorder(self, postorder: List[int]) -> bool:
def ver(i,j):
if i >= j:
return True
left_end = i
while postorder[left_end] < postorder[j]:
left_end += 1
right_end = left_end
while postorder[right_end] > postorder[j]:
right_end += 1
return right_end == j and ver(i,left_end - 1) and ver(left_end,right_end - 1)
return ver(0,len(postorder) - 1)