q->left=s->right;
s->right=p->right;
}
if(q==p)
t->root=s;
else
flag=1;
}
if(flag)
{
if(p==f->left)
f->left=s;
else
f->right=s;
}
free(p);
}
else
printf("Don't have the node\n");
}
/*遍历二叉树*/
void traversing_binary_tree( struct tree *t)
{
struct node *stack[MAXSIZE], *p;
p=t->root;
int top = -1;
if (p!= NULL)
{
/* 根节点入栈 */
top++;
stack[top] = p;
/* 栈不空时循环 */
while (top > -1)
{
/* 出栈并访问该节点 */
p = stack[top];
top--;
printf("%4d\n ", p->score);
/* 右孩子入栈 */
if (p->right!= NULL)
{
top++;
stack[top] = p->right;
}
/* 左孩子入栈 */
if (p->left != NULL)
{
top++;
stack[top] = p->left;
}
}
printf("\n");
}
}
int main()
{
struct tree *newtree;
int score1;
char c;
score1=0;
newtree=create_tree();
printf("二叉树:\n");
while(1)
{
printf("#------------#\n");
printf("# I:添加分数\n");
printf("# P:打印分数列表\n");
printf("# S:查找学生\n");
printf("# D:删除学生\n");
printf("# E:退出\n");
printf("#------------#\n");
printf("请选择输入:");
scanf("%s",&c);
switch(c)
{
case 'I':
case 'i':
inseart_tree(newtree,400);
inseart_tree(newtree,200);
inseart_tree(newtree,300);
inseart_tree(newtree,100);
inseart_tree(newtree,500);
inseart_tree(newtree,600);
break;
case 'P':
case 'p':
printf("打印分数列表:\n");
traversing_binary_tree(newtree);
break;
case 'S':
case 's':
printf("请输入要查询的分数:");
scanf("%d",&score1);
search(newtree,score1);
printf("The count is%d\nThe score is%d\n",newtree->count,newtree->root->score);
break;
case 'D':
case 'd':
printf("请输入要删除的分数:");
scanf("%d",&score1);
delete_tree(newtree,score1);
printf("删除OK!\n");
break;
case 'E':
case 'e':
exit(0);
}
}
}