typedefstructTreeNode *Tree; structTreeNode { Tree Left,Right;//用两个指针来指向左右子树 int data,flag;//data来存放这个节点的数据,flag用来判断是否访问过该节点 };
Tree BuildTree(int N); Tree NewNode(int V); Tree Insert(Tree T,int V); charJudge(Tree T,int N); charcheck(Tree T,int N); voidFreeTree(Tree T); voidResetT(Tree T);
intmain() { int N,i,L; Tree T; scanf("%d",&N); while(N)//当N为0时返回 { scanf("%d",&L); T = BuildTree(N);//建立二叉搜索树 for(i = 0; i < L; i++)//多组数据,使用读入的L来控制读入的数据组数 { if(Judge(T,N)) printf("Yes\n");//判断是否是一棵树 elseprintf("No\n"); ResetT(T);//将T初始化 } FreeTree(T);//判断完成后释放当前树 scanf("%d",&N); } return0; }
Tree BuildTree(int N) { int i,V; Tree T; scanf("%d",&V); T = NewNode(V);//开辟第一个节点 for(i=1;i<N;i++) { scanf("%d",&V); T = Insert(T,V);//后续节点的插入(保证插入完成后该树为二叉搜索树) } return T; }
Tree NewNode(int V) { Tree T = (Tree)malloc(sizeof(struct TreeNode));//开辟新节点 T -> data = V; T -> Left = T->Right = NULL; T -> flag = 0;//初始化操作 return T; }