二叉搜索树的后序遍历序列和前序遍历序列

#输入一个整数数组,判断该数组是否是某二叉搜索树的后序遍历结果
#注:二叉搜素树的左子树结点小于根结点  右子树结点大于根结点
#思路:可以先找到二叉树的根结点,在基于根结点把整颗树的遍历序列拆分成左子树对应的子序列和右子树对应的子序列,在递归处理这两个子序列
def Sequence(arr):
	if len(arr) == 0:
		return False
	#后序遍历,最后一个数是根结点  ==>左-右-根
	root = arr[-1]
	length = len(arr)
	index = 0
	#从头开始遍历判断左子树
	for i in range(length-1):
		index = i
		if arr[i] > root:
			break
	#判断右子树 从+1开始是因为默认在index时候值已经大于root了,肯定属于右子树了
	for i in range(index+1,length-1):
		if arr[i] < root:
			return False

	#递归验证左右子树是否都是二叉搜索树
	left = True
	if index > 0:
		left = Sequence(arr[:index])
	right = True
	if index < length-1:
		right = Sequence(arr[index:length-1])
	return left and right

array = [7, 4, 6, 5, 9, 11, 10, 8]
print(Sequence(array))

#相关:判断数组是否是前序遍历的结果
def Sequence1(arr):
	if len(arr) == 0:
		return False
	#前序遍历,第一个是根结点  ==>根-左-右
	root = arr[0]
	length = len(arr)
	index = 1
	#从第二个元素开始遍历判断左子树
	for i in range(index,length):
		index = i
		if arr[i] > root:
			break
	#判断右子树 从1开始是因为默认在index时候值已经大于root了,肯定属于右子树了
	for i in range(index+1,length-1):
		if arr[i] < root:
			return False

	#递归验证左右子树是否都是二叉搜索树
	left = True
	if index > 1:
		left = Sequence1(arr[1:index])
	right = True
	if index < length:
		right = Sequence1(arr[index:length])
	return left and right

array1 = [8, 4, 7, 3, 5, 9, 11, 10]
print(Sequence1(array1))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值