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

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

解题思路:涉及到二叉树的问题,一般可以这样处理:找到根结点,把该树拆分成左、右子树,继续处理子树,这就变成了一个递归的过程。本题感觉不存在高深的算法,那么可以归结为找规律题,画些草图,不难发现序列的最后一个点即为树的根节点。

bool judge(int a[],int len)
{
    if(a==nuLL||len<=0)
        return false;
    
    int i;
    for(i=0;i<len-1&&a[i]<a[len-1];i++)
        ;
    
    int j;
    for(j=i;j<len-1;j++)
    {
        if(a[j]<a[len-1])
            return false;                  
    }     
    
    bool left=true;
    if(i>0)
        left=judge(a,i);
        
    bool right=true;
    if(i<len-1)
        right=judge(a+i,len-i-1);
    
    return (left&&right);
}
原文地址:https://www.cnblogs.com/icfnight/p/3293014.html