zoukankan      html  css  js  c++  java
  • 九度 题目1367:二叉搜索树的后序遍历序列

    题目链接:1367

    题目描述:

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

    输入:

    每个测试案例包括2行:

    第一行为1个整数n(1<=n<=10000),表示数组的长度。

    第二行包含n个整数,表示这个数组,数组中的数的范围是[0,100000000]。

    输出:

    对应每个测试案例,如果输入数组是某二叉搜索树的后序遍历的结果输出Yes,否则输出No。

    样例输入:
    7
    5 7 6 9 11 10 8
    4
    7 4 6 5
    样例输出:
    Yes
    No
    解:左子树小于根,右子树大于根,遍历顺序:左-右-根。

    代码:

    #include<iostream>
    #include<cstdlib>
    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<vector>
    using namespace std;
    typedef long long ll;
    struct Node  //结点结构
    {
        ll val;
        Node *left;
        Node *right;
    };
    bool Is_BST(ll *val,int beg,int en)
    {
        if(beg>en) return true;
        int i,j;
        ll temp=val[en];
        for(i=0;i<en;i++)
        {
            if(val[i]>temp)
            {
               break;
            }
        }
        for(j=i+1;j<en;j++)
        {
            if(val[j]<=temp)
                return false;
        }
        bool left=true;
        if(i>0)
            left=Is_BST(val,beg,i-1);
        bool right=true;
        if(i<en-1)
            right=Is_BST(val,i+1,en-1);
        return left&&right;
    }
    
    int main()
    {
        int n;
        while(scanf("%d",&n)==1)
        {
            ll *val=new ll[n+1];
            for(int i=0;i<n;i++)
                scanf("%lld",&val[i]);
            if(Is_BST(val,0,n-1))
                printf("Yes
    ");
            else
                printf("No
    ");
        }
        return 0;
    }

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Javascript常用代码
    Node.cluster
    swift3.0 hello swift(1)
    vs2013 linq to mysql
    ThinkPHP5作业管理系统中处理学生未交作业与已交作业信息
    ThinkPHP5 Model分层及多对多关联的建立
    ThinkPHP5中Session的使用
    用户登陆模块的后端实现
    使用BootStrapValidator来完成前端输入验证
    空间session失效的解决方法
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965275.html
Copyright © 2011-2022 走看看