#如何检验一个数组是否为查询二叉树后序遍历输出
#1,将这个数组颠倒后输入查询二叉树,然后后序遍历输出,与原数组次序相同,则表明原数组为查询二叉树后续遍历输出
#2,查询二叉树后序遍历输出满足:
# 1根节点在最后
# 2数组前部小于根节点,后部大于根节点
# 3将数组的前半部和后半部 又分别符合1,2,3;直至子节点为叶节点(无下一级子节点)
def IsPostorder(ltest=[]):
k=len(ltest)
if k==0: #若节点没有子节点,则为真
return True
rootnode=ltest[-1]
LAnterior=[]
LSecond=[]
for i in range(0,len(ltest)-1):
if ltest[i]<=rootnode:
if i>k:#一旦小于根节点的数出现在大于根节点书的后面,则为否
return False
break
LAnterior.append(ltest[i])
else:
k=i
LSecond.append(ltest[i])
return IsPostorder(LAnterior) and IsPostorder(LSecond) #前后半部亦必须同时为真
Ltmp= [14, 13, 29, 22, 46, 33, 21, 71, 80, 83, 63, 67, 45, 99, 93, 85]
print(IsPostorder(Ltmp))
'''