#include<cstdio> using namespace std; const int maxn=105; int n; struct Node///建立结点,用结构体加指针,v表示结点的值 { int v; Node *left,*right;///用指针指向左子树和右子树 Node():left(NULL),right(NULL) {}///创建新结点 } tree ; Node* root;///定义根结点 Node *newnode() { return new Node(); ///申请新结点 } Node* Create(Node *rt,int v)///建立树,需要传入根结点和需要建立的值 { if(rt==NULL)///如果结点为空,则将值赋给结点 { rt=newnode();///新结点 rt->v=v;///结点赋值 rt->left=rt->right=NULL;///左右子树为空 return rt;///返回结点 } if(rt->v<v)///当输入值大于父节点时,使用递归方法将其建立为右子树 rt->right=Create(rt->right,v); else///当输入值小于父节点时,使用递归方法将其建立为左子树 rt->left=Create(rt->left,v); return rt; } void PreOrder(Node *rt,int v) ///先序遍历,并且输出 { if(v==1) printf("%d",rt->v); else printf(" %d",rt->v); if(rt->left!=NULL) PreOrder(rt->left,v+1);///递归调用 if(rt->right!=NULL) PreOrder(rt->right,v+1); } int main() { while(~scanf("%d",&n)&&n) { root=NULL;///初始化根结点 int v; for(int i=0; i<n; i++) { scanf("%d",&v); root=Create(root,v);///边输入边建立树 } PreOrder(root,1);///先序遍历 printf("\n"); } return 0; }
浙公网安备 33010602011771号