题目博客:
http://blog.csdn.net/v_JULY_v/article/details/6057286
题目:
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。
如果是返回true,否则返回false。
例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:
8
/ /
6 10
/ / / /
5 7 9 11
因此返回true。
如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。
#coding=utf-8
class TreeNode:
def __init__(self,value,leftChild=None,rightChild=None):
self.value=value
self.leftChild,self.rightChild=leftChild,rightChild
def IsCanTree(*inlist):
if not inlist:#列表非空
return True
root=inlist[-1]#最后一个肯定为根节点
leftChildlist=[]#左孩子节点比根节点小
gt_index=0
for index,value in enumerate(inlist):
if value>=root:
gt_index=index
break
else:
leftChildlist.append(value)
right_child_list=inlist[gt_index:-1]
flag=True
for gtvalue in right_child_list:#如果在右孩子节点找到比根节点小的节点。就说明不是前序遍历
if gtvalue<root:
flag=False
break
if flag:
if False in (IsCanTree(*leftChildlist),IsCanTree(*right_child_list)):#判断右孩子节点集,右孩子节点集符不符合前序遍历序列
flag=False
return flag
print IsCanTree(*[7,4,6,5])