• 九度 题目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;
    }

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

  • 相关阅读:
    source insight快捷键及使用技巧
    HTTP 状态码
    select poll epoll三者之间的比较
    服务器程序后台化以及守护进程的编写规范
    Linux 信号表
    Linux下有线无线网络配置------命令模式
    浅谈 qmake 之 pro、pri、prf、prl文件
    Python VUE 基础知识
    VUE 实现tab切换页面效果
    爬虫框架:scrapy
  • 原文地址:https://www.cnblogs.com/Tobyuyu/p/4965275.html
Copyright © 2020-2023  润新知