zoukankan      html  css  js  c++  java
  • 团体程序设计天梯赛 L2-004 这是二叉搜索树吗? (25分)

    题目链接:

    L2-004 这是二叉搜索树吗? (25分)

    思路:

    非镜像和镜像需要分开单独进行搜索;
    按非镜像/镜像规则将前序序列严格转化为后序序列,如果序列个数不足n个那说明不符合当前规则;
    均不符合我们就输出NO;

    代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    
    int n, a[1005];
    vector<int> post;
    void dfs(int l, int r, bool mir) {
    	if(l > r) return;
    	int x, y;
    	if(!mir) {
    		for(x = l + 1; a[x] < a[l] && x <= r; ++x);
    		for(y = x; a[y] >= a[l] && y <= r; ++y);
    	}
    	else {
    		for(x = l + 1; a[x] >= a[l] && x <= r; ++x);
    		for(y = x; a[y] < a[l] && y <= r; ++y);	
    	}
    	if(x > l + 1) dfs(l + 1, x - 1, mir);
    	if(x < r + 1) dfs(x, y - 1, mir);
    	post.push_back(a[l]);
    }
    inline void check() {
    	if(post.size() == n) {
    		puts("YES");
    		cout << post[0];
    		for(int i = 1; i < n; i++) cout << ' ' << post[i];
    		exit(0);	
    	}
    }
    
    int main() {
    #ifdef MyTest
    	freopen("Sakura.txt", "r", stdin);
    #endif
    	cin >> n;
    	for(int i = 1; i <= n; i++) cin >> a[i];
    	dfs(1, n, false); 
    	check();
    	post.clear(); 
    	dfs(1, n, true);
    	check();
    	puts("NO");
    	return 0;
    }
    
  • 相关阅读:
    LeetCode 55
    LeetCode 337
    LeetCode 287
    LeetCode 274
    LeetCode 278
    LeetCode 264
    LeetCode 189
    LeetCode 206
    LeetCode 142
    LeetCode 88
  • 原文地址:https://www.cnblogs.com/yuhan-blog/p/12308638.html
Copyright © 2011-2022 走看看