The order of a Tree |
---|
题意: 给定一个二叉搜索树的插入顺序,要求输出建树之后的前序遍历。
题解: 连续第二天做到二叉搜索树了,真的吹爆这个算法,从二叉树啥也不懂,到简单搜索树直接秒杀,全靠这个模板。
#include<bits/stdc++.h>
using namespace std;
int n, x;
vector<int> ans;
void build(vector<int> tree) {
if(tree.size() == 0) return ;
vector<int> left, right;
for(int i = 1; i < tree.size(); i++) {
if(tree[i] > tree[0]) right.push_back(tree[i]);
else left.push_back(tree[i]);
}
ans.push_back(tree[0]); //记录下根节点,然后按照左子树、右子树的顺序递归,按顺序输出ans中的内容即是前序遍历
build(left); //针对左子树进行建树
build(right); //针对右子树进行建树
}
int main() {
while(~scanf("%d", &n)) {
ans.clear();
vector<int> tree;
for(int i = 0; i < n; i++) {
scanf("%d", &x);
tree.push_back(x);
}
build(tree);
for(int i = 0; i < ans.size() - 1; i++) printf("%d ", ans[i]);
printf("%d\n", ans[ans.size() - 1]);
}
return 0;
}