zoukankan      html  css  js  c++  java
  • 判断后序遍历尔查搜索树是否正确

    《剑指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;
    
    }
  • 相关阅读:
    placement new小结
    template template parameter 模板模板参数
    windows下创建和删除软链接
    gcc下载地址
    map的erase函数小结
    typedef函数指针
    宏定义条件编译中使用多条件
    关于c++模板特例化测试
    tolua使用
    c++多态
  • 原文地址:https://www.cnblogs.com/bendantuohai/p/4527331.html
Copyright © 2011-2022 走看看