现在的位置: 首页 > 综合 > 正文

第十一题 判断数组中的节点是不是二叉查找树的后序遍历

2018年04月13日 ⁄ 综合 ⁄ 共 684字 ⁄ 字号 评论关闭

题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。

如果是返回true,否则返回false。

例如输入5、7、6、9、11、10、8,由于这一整数序列是如下树的后序遍历结果:

         8

      /  /

     6    10

    / /  / /

   5  7 9  11

因此返回true。

如果输入7、4、6、5,没有哪棵树的后序遍历的结果是这个序列,因此返回false。

//判断数组中的节点是不是二叉查找树的后序遍历
#include <iostream>
using namespace std;
bool snode(int *a,int legth)
{
	if (a==nullptr||legth<=0)
	{
		return false;
	}
	int root=*(a+legth-1);
	int i=0;
	for (;i<legth-1;++i)
	{
		if (*(a+i)>root)
		{
			break;
		}
	}
	int j=0;
	for (j=i;j<legth-1;++j)
	{
		if (*(a+j)<root)
		{
			return false;
		}
	}
	bool left=true;
	if (i>0)
	{
		left=snode(a,i);
	}
	if(i < legth - 1)
	{
		bool right=snode(a+i,legth-i-1);
	}
	return (left&&right);
}
int main()
{
	int a[]={5,7,6,9,11,10,8};
	bool s=true;
	s=snode(a,sizeof(a)/sizeof(int));
	if (s==true)
	{
		cout<<"yes"<<endl;
	}
	else
	{
		cout<<"no"<<endl;
	}
}

抱歉!评论已关闭.