Exemplo n.º 1
0
	bool isPostorder(const vector<int> &v, int l , int r){
        
        if( l==r || l+1 == r) return true;
        
        int root = v[r], i=l, mid;
        
        while(i<r && v[i]<root) i++;
        mid  = i;
        
        while(i < r && v[i] > root) i++;
        if(i != r) return false;
        
        if(mid == r || mid == l) return isPostorder(v, l ,r-1);
        else  return (isPostorder(v, l, mid-1) && (isPostorder(v, mid, r-1)) );

   }
Exemplo n.º 2
0
// ====================²âÊÔ´úÂë====================
void Test(char* testName, int sequence[], int length, bool expected)
{
    if(testName != NULL)
        printf("%s begins: ", testName);

    if(isPostorder(sequence, length) == expected)
        printf("passed.\n");
    else
        printf("failed.\n");
}
Exemplo n.º 3
0
bool isPostorder(int* array, int length)
{
	if(array == NULL || length <= 0)
	{
		return false;
	}

	int root = array[length-1];

	int i = 0;
	for(; i < length - 1; i++)
	{
		if(array[i] > root)
		{
			break;
		}
	}

	int j = i;
	for(; j < length - 1; j++)
	{
		if(array[j] < root)
		{
			return false;
		}
	}

	//ÅжÏ×ó×ÓÊ÷ÊÇ·ñΪ¶þ²æËÑË÷Ê÷
	bool left = true;
	if(i > 0)
	{
		left = isPostorder(array, i);
	}

	bool right = true;
	if(i < length - 1)
	{
		right = isPostorder(array + i, length- 1 - i);
	}
	//ÅжÏÓÒ×ÓÊ÷ÊÇ·ñΪ¶þ²æËÑË÷Ê÷
	return (left && right);
}
Exemplo n.º 4
0
	bool VerifySquenceOfBST(vector<int> sequence) {
		if(sequence.size() == 0) return false;
        else return isPostorder(sequence, 0, sequence.size()-1);
	}