• L2-004. 这是二叉搜索树吗?(前序转后序递归)


    L2-004. 这是二叉搜索树吗?

    时间限制
    400 ms
    内存限制
    65536 kB
    代码长度限制
    8000 B
    判题程序
    Standard
    作者
    陈越

    一棵二叉搜索树可被递归地定义为具有下列性质的二叉树:对于任一结点,

    • 其左子树中所有结点的键值小于该结点的键值;
    • 其右子树中所有结点的键值大于等于该结点的键值;
    • 其左右子树都是二叉搜索树。

    所谓二叉搜索树的“镜像”,即将所有结点的左右子树对换位置后所得到的树。

    给定一个整数键值序列,现请你编写程序,判断这是否是对一棵二叉搜索树或其镜像进行前序遍历的结果。

    输入格式:

    输入的第一行给出正整数N(<=1000)。随后一行给出N个整数键值,其间以空格分隔。

    输出格式:

    如果输入序列是对一棵二叉搜索树或其镜像进行前序遍历的结果,则首先在一行中输出“YES”,然后在下一行输出该树后序遍历的结果。数字间有1个空格,一行的首尾不得有多余空格。若答案是否,则输出“NO”。

    输入样例1:
    7
    8 6 5 7 10 8 11
    
    输出样例1:
    YES
    5 7 6 8 11 10 8
    
    输入样例2:
    7
    8 10 11 8 6 7 5
    
    输出样例2:
    YES
    11 8 10 7 5 6 8
    
    输入样例3:
    7
    8 6 8 5 10 9 11
    
    输出样例3:
    NO
    

    提交代码

    #include<iostream>
    #include<vector>
    #include <algorithm>
    using namespace std;  
    vector<int>v;  
    int value[2000];  
    void vjudge(int L,int R,int flag)  
    {  
        int l=L+1,r=R;  
        if(L>R) return;  
        if(!flag)  
        {  
            while(l<=R&&value[l]<value[L]) l++;  
            while(r>L&&value[r]>=value[L]) r--;  
        }  
        else  
        {  
            while(l<=R&&value[l]>=value[L]) l++;  
            while(r>L&&value[r]<value[L]) r--;  
        }  
        if(l-r!=1) return;  
        vjudge(L+1,r,flag);  
        vjudge(l,R,flag);  
        v.push_back(value[L]);  
    }  
    int main()  
    {  
        int n;  
        scanf("%d",&n);  
        for(int i=1;i<=n;i++)  
        scanf("%d",&value[i]);  
        vjudge(1,n,0);  
        if(v.size()==0)  
        {  
            vjudge(1,n,1);  
        }  
        if(v.size()==n)  
        {  
            printf("YES
    ");  
            for(int i=0;i<n;i++)  
            printf("%d%c",v[i],i==n-1?'
    ':' ');  
        }  
        else  
            printf("NO
    ");  
    }  
  • 相关阅读:
    [Memcache] memcache中的过期时间策略
    [Memcache] memcache中add和set方法的区别
    [Redis] redis业务实践 , 这次用哈希
    [PHP] PHPMailer发信失败,用这种方式找原因
    [PHP] fastcgi_split_path_info与传递PATH_INFO
    [PHP] 设计一个可扩展的用户登陆系统
    [OAuth] OAuth2.0中的客户端模式
    [Linux] 解决CentOS下Requires: libjson-c.so错误
    [PHP] PHP5中的写时复制change on write
    [JavaScript]js中typeof的用法
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13271092.html
Copyright © 2020-2023  润新知