3-31树的练习||

建立排序树


#include<stdio.h> struct node { node *lchild; node *rchild; int r; }tree[102]; int loc; node *create() { tree[loc].lchild = tree[loc].rchild = NULL; return &tree[loc ++]; } void *build(int x,node *t) { node *q = t; node *p = create(); p -> r = x; while(q -> rchild != NULL || q -> lchild != NULL) { while(q -> r <= x && q -> rchild != NULL) q = q ->rchild; while(q -> r >= x && q -> lchild != NULL) q = q -> lchild; if(q -> lchild != NULL && q ->r <= x) break; if(q -> rchild != NULL && q -> r >= x) break; } if(q -> r <= x) { q -> rchild = p; } else { q -> lchild = p; } } void preorder(node *p) { printf("%d ",p -> r); if(p -> lchild != NULL) preorder(p -> lchild); if(p -> rchild != NULL) preorder(p -> rchild); } void inorder(node *p) { if(p -> lchild != NULL) inorder(p -> lchild); printf("%d ",p -> r); if(p -> rchild != NULL) inorder(p -> rchild); } void postorder(node *p) { if(p -> lchild != NULL) postorder(p -> lchild); if(p -> rchild != NULL) postorder(p -> rchild); printf("%d ",p -> r); } int main() { int n; while(scanf("%d",&n) != EOF) { int x; loc = 0; node *t; scanf("%d",&x); t = create(); t -> r = x; for(int i = 1; i != n ; i ++) { scanf("%d",&x); build(x,t); } preorder(t); printf("\n"); inorder(t); printf("\n"); postorder(t); printf("\n"); } return 0; }

 

posted on 2013-03-31 20:32  lgy111  阅读(121)  评论(0)    收藏  举报

导航