2015年3月1日 星期日

[UVA] 12347 - Binary Search Tree

#include<bits/stdc++.h>
using namespace std;
struct node{
    int val;
    node *l,*r;
};
void newnode(node *&pt){
    pt=new node;
    pt->l=NULL;
    pt->r=NULL;
}
vector<int> arr;
node* build(node *pt,int l,int r){
    if(l>r) return pt;
    if(pt==NULL) newnode(pt);
    pt->val=arr[l];
    if(l<r){
        int i;
        for(i=l+1;i<=r;i++){
            if(arr[i]>arr[l]) break;
        }
        pt->l=build(pt->l,l+1,i-1);
        pt->r=build(pt->r,i,r);
    }
    return pt;
}
void dfs(node *pt){
    if(pt==NULL) return;
    dfs(pt->l);
    dfs(pt->r);
    printf("%d\n",pt->val);
}
int main(){
    int n;
    while(scanf("%d",&n)!=EOF){
        arr.push_back(n);
    }
    node *root=build(root,0,arr.size()-1);
    dfs(root);
}

沒有留言:

張貼留言