排序二叉树
#include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> using namespace std; int key[10000],flag=0,root=-1; int l[10000],r[10000]; void insert(int in,int x){ if(x<=key[in]){ if(l[in]==-1)l[in]=flag; else insert(l[in],x); } else{ if(r[in]==-1)r[in]=flag; else insert(r[in],x); } } void order(int out){ if(l[out]!=-1)order(l[out]); printf("the key is:%d ",out); printf("%d\n",key[out]); if(r[out]!=-1)order(r[out]); } int main(){ int i,j,k,m,n; scanf("%d",&n); int x; flag=0,root=-1; memset(l,-1,sizeof(l)); memset(r,-1,sizeof(r)); while(n--){ scanf("%d",&x); if(root==-1)key[++root]=x; else{ key[++flag]=x; insert(root,x); } } order(root); return 0; }
排序二叉树的原理其实十分简单,就是比根节点小的都放在左边,比根节点大的都放在右边,然后递归实现