判断后序遍历尔查搜索树是否正确

《剑指Offer》24题:

题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同

bool verifyLRD(int * arrays,int start,int end)
{
    //条件检测
    if (arrays==NULL ||start<0||end<0||start>end)
    {
        return false;
    }
    //递归终止条件
    if (start == end)
    {
        return true;
    }
    //将最后一个节点作为根节点
    int rootData = arrays[end];
    int i = start;
    //找到分界节点
    while (i<end)
    {
        if (arrays[i]>=rootData)
            break;
        i++;
    }
    //若右子树中出现小于根节点的节点,返回false
    int j = i;
    while (j<end)
    {
        if (arrays[j]<rootData)
        {
            return false;
        }
        j++;
    }
    bool left=true,right=true;
    if (start<=i-1)//容易忽略
    {
        left = verifyLRD(arrays,start,i-1);
    }
    if (i<=end-1)//容易忽略
    {
        right = verifyLRD(arrays,i,end-1);
    }

    return left&&right;

}

 

posted on 2015-05-25 10:53  bendantuohai  阅读(160)  评论(0编辑  收藏  举报