分析:
前序: 根 左 右
后序: 左 由 根
二叉搜索树: 左 < 根 < 右
那么这就非常明显了。
def ifpost(postArray, start, end):
#one or "" is true
if(end - start <= 1):
return True
i = start
#left branch whose value < root
while i <= end and postArray[i] < postArray[end]:
i += 1
#partion of left and right branch
part = i
#right branch whose value > root
while i <= end and postArray[i] > postArray[end]:
i += 1
#not all right part > root
if(i < end):
return False
return ifpost(postArray, start, part - 1) and ifpost(postArray, part, end - 1)
def ifpreorder(preArray, start, end):
if(end - start <= 1):
return True
i = end
while(i >= start and preArray[i] > preArray[start]):
i -= 1
partition = i
while(i >= start and preArray[i] < preArray[start]):
i -= 1
if(i > start):
return False
return ifpreorder(preArray, start + 1, partition) and \
ifpreorder(preArray, partition + 1, end)