二叉搜素树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索数的后序遍历的结果。

方法是前面提到过的先找到该树的根节点,然后确定左子树和右子树。

在后序遍历中根节点就是数组的最后一个树。再根据搜索树的特点,所有左子树的节点比根节点要小,右子树的节点比根节点要大。所以从头依次判断直到一个数比最后那个树要大则该数后面的数应该都要比最后一个数大。例如{5,7,6,9,11,10,8}则根节点为8,前面3个数5,7,6为左子树,9,11,10为右子树。然后再递归判断{5,7,6},{9,11,10}。

下面是代码:

bool VerifySquenceOfBST(int sequence[], int length)
{
    if(sequence == NULL || length <=0 )
        return false;

    int root = sequence[length -1];

    //查找左子树
    int i=0;
    for(; i< length; ++i)
    {
        if(sequence[i] > root)
            break;
    }

    //遍历右子树
    int j =i;
    for(; j < length; ++j)
    {
        if(sequence[i]  < root)
            return false;
    }

    bool left =true;
    if(i > 0)
        left = VerifySquenceOfBST(sequence,i);

    bool right =true;
    if( i < length-1 )
        right = VerifySquenceOfBST(sequence+i,length-i-1);

    return (left && right);
}

 

posted @ 2013-03-06 13:43  没离开过  阅读(92)  评论(0)    收藏  举报