class Solution:
def verifyPostorder(self, postorder: List[int]) -> bool:
def dfs(nodes):
n = len(nodes)
if n == 0:
return True, None, None
if n == 1:
return True, nodes[0], nodes[0]
root = nodes[-1]
first = 0
for first in range(n):
if nodes[first] > root:
break
left = nodes[:first]
right = nodes[first: n - 1]
lres, lmax, lmin = dfs(left)
if not lres or (lmax is not None and lmax > root):
return False, None, None
rres, rmax, rmin = dfs(right)
if not rres or (rmin is not None and rmin < root):
return False, None, None
return True, rmax if rmax is not None else root, lmin if lmin is not None else root
return dfs(postorder)[0]