【面试题】剑指Offer-24-判断一个数组是不是某颗二叉搜索树的后序遍历

题目概述

给定一个整形数组,判断这个数组是否满足一颗搜索二叉树的后序遍历结果

比如{5,7,6,9,11,10,8},则返回true,因为这个数组满足一个搜索二叉树的后序遍历结果


题目考点

考察了对后序遍历的结果的掌握

我们知道,后序遍历的最后一个元素是该树的根节点8

然后通过遍历数组,以8的大小划分左子树(5,7,6)和右子树(9,11,10)

然后递归进行判断左子树和右子树即可

代码实现

#pragma once

/*
* author:haohaosong
* date:2017/3/20
* note:面试题-24判断一个数组是不是某颗二叉树的中序遍历
*/

//如果是,返回true
//如果不是,返回FALSE
bool isBST(int seq[], int length)
{
	if (seq == NULL || length < 0)
		return false;

	//定位根节点
	int root = seq[length - 1];

	//找出左子树的根
	int i = 0;
	for (; i < length - 1; ++i)
	{
		if (seq[i] > root)
			break;
	}

	//判断右子树是否正确,若不正确,返回FALSE
	int j = i;
	for (; j < length-1; ++j)
	{
		if (seq[j] < root)
			return false;
	}

	//递归判断左子树和右子树是否满足条件
	bool isBST_Left = true;
	if (i > 0)
		isBST_Left = isBST(seq, i);

	bool isBST_Right = true;
	if (j < length - 1)
		isBST_Right = isBST(seq + i, length - i - 1);

	return (isBST_Left && isBST_Right);
}

void TestIsBST()
{
	int seq[] = { 5, 7, 6, 9, 11, 10, 8 };
	cout << "是否是一颗二叉搜索树?:" << isBST(seq,sizeof(seq)/sizeof(seq[0])) << endl;

	int seq2[] = {7,4,6,5};
	cout << "是否是一颗二叉搜索树?:" << isBST(seq2, sizeof(seq2) / sizeof(seq2[0])) << endl;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值