二叉搜索树的特点就是左子树<跟结点<右子树,所有判断是否为后序遍历就是用最后一个结点也就是根节点,然后用序列的前半段去比较根节点找到左子树,如果后半段满足右子树的要求及大于当前根节点,即满足条件,接着递归判断左右子树。
class Solution:
def verifyPostorder(self, postorder: List[int]) -> bool:
def dfs(left, right):
if left >= right:
return True
i = left
while postorder[i] <= postorder[right] and i < right:
i += 1
mid = i
while postorder[i] >= postorder[right] and i < right:
i += 1
if i == right:
return dfs(left, mid-1) and dfs(mid, right-1)
else:
return False
return dfs(0, len(postorder)-1)