1つの数列が二叉木の後順に遍歴した結果かどうかを判断する


例えば配列a[]={5,7,6,9,11,10,8}
二査探索ツリーの後順遍歴であるか否かを判断するには,そのシーケンスを探索二叉木に還元するだけでよいが,二叉木の還元過程
1.ルートノードを特定します.もちろん、後続であるため、ルートノードは配列の末尾要素にあります.
2.2本の木の範囲と順番に挿入する方向を確定する
この問題で8がルートノードである6と10はルートノードに最も近い要素であり,すなわち挿入方向は6と10から順次前進し,6から5の位置はカットオフ,10から9の位置はカットオフである.
int a[]={5,7,6,9,11,10,8};
//                 
struct Node{
	int val;
	Node* left;
	Node* right;
	Node():val(0),left(NULL),right(NULL)
	{}
};
int* FindSplit(int* const a,int length,int value)
{
	if(NULL==a)
		return NULL;
	//   a    value      
	int key=value;
	for(int i=0;i=value)
		{
			return &a[i];
		}
	}
	return NULL;
}
void InsertNode(Node* root,int value)
{
	if(NULL==root)
	{
		root=new Node();
		root->val=value;
		return;
	}
	Node* cur=root;
	while(NULL!=cur)
	{
		if(cur->val>value)
		{
			//   
			if(NULL==cur->left)
			{
				cur->left=new Node();
				cur->left->val=value;
				break;
			}
			else
			{
				cur=cur->left;
			}
		}
		else
		{
			//   
			if(NULL==cur->right)
			{
				cur->right=new Node();
				cur->right->val=value;
				break;
			}
			else
			{
				cur=cur->right;
			}
		}
	}
}
void ReverTraversal(Node* root,vector &mm)
{
	if(NULL==root)
	{
		return ;
	}
	ReverTraversal(root->left,mm);
	ReverTraversal(root->right,mm);
	mm.push_back(root->val);	
}
int main()
{
	int* begin=NULL,*end=NULL,* mid=NULL;
	begin=a;
	end=begin+(sizeof(a)/sizeof(int)-1);
	mid=FindSplit(a,sizeof(a)/sizeof(int),*end);
	Node* root=new Node();
	root->val=*end;
	int nCount=0;
	int* prev=mid-1,*reser=(end-1);
	for(;prev!=begin&&reser!=mid;)
	{
		if(nCount&0x1)
		{
			InsertNode(root,*prev);
			prev--;
			nCount++;
		}
		else
		{
			InsertNode(root,*reser);
			reser--;
			nCount++;
		}
	}
	while(prev!=begin)
	{
		InsertNode(root,*prev);
		prev--;
	}
	while(reser!=mid)
	{
		InsertNode(root,*reser);
		reser--;
	}
	InsertNode(root,*begin);
	InsertNode(root,*mid);
	//    
	vectorhe;
	ReverTraversal(root,he);
	if(he.size()==sizeof(a)/sizeof(int))
	{		
		bool mark=false;
		for(nCount=0;nCount!=he.size();nCount++)
		{
			if(he[nCount]!=a[nCount])
			{
				cout<