题目描述:输入一个整数数组,判断该数组是否是某二元查找树的后序遍历的结果。如果是,那么返回True,否则返回False.
分析解答:二元查找树的特点是:对于任意一个结点,它的左子树上所有的结点都小于这个结点的值,它的右子树上所有结点的值都大于这个结点的值。根据它的这个特点以及二元查找树后序遍历的特点,可以得出。
def IsAterOrder(array, start, end):
if array == None:
return False
# 数组的最后一个结点必定是根节点
root = array[end]
# 找到第一个大于root的值,那么前面所有的结点都位于root的左子树上
i = start
while i < end:
if(array[i] > root):
break
i += 1
# 如果序列是后序遍历的序列, 那么从i开始的所有值都应该大于根节点root的值
j = i
while j < end:
if array[i] < root:
return False
j += 1
left_IsAterOrder = True
right_IsAterOrder = True
# 判断小于root值的序列是否是某一二元查找树的后序遍历
if i > start:
left_IsAterOrder = IsAterOrder(array, start, i-1)
# 判断大于root的值的序列是否是某一二元查找序列的后序遍历
if j < end:
right_IsAterOrder = IsAterOrder(array, i, end)
return left_IsAterOrder and right_IsAterOrder