代码: 全选
// binary tree
// Last Modified: 2008-06-16
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct data
{
int index;
int key;
} data;
typedef struct node
{
struct node *left;
data datas;
struct node *right;
} node, *tree;
int global_index = 0;
int nodes = 0;
void ergod(node *t);
void insert(tree t, char *msg);
void insert(tree t, char *msg)
{
int i;
extern int global_index;
global_index++;
printf("\n");
printf("\n %s node %d: ", msg, global_index);
printf("\n");
printf("\n data: ");
getchar();
i = getchar();
if (i != '#')
{
t = (node *)malloc(sizeof(node));
if (t == NULL)
printf("\n overflow ");
t->datas.index = global_index;
t->datas.key = i;
insert(t->left, "left");
insert(t->right, "right");
}
else
{
global_index--;
// depth--;
t = NULL;
}
}
void ergod(node *t)
{
extern int global_index;
if (global_index > 1 && t != NULL)
{
printf("\n %d -> %c ", t->datas.index, t->datas.key);
ergod(t->left);
ergod(t->right);
}
}
int main(int argc, char** argv)
{
int key;
char *msg;
msg = malloc(sizeof(char) * 128);
tree t;
printf("\n");
printf("\n Binary Tree ");
printf("\n");
printf("\n root ");
while (1)
{
printf("\n");
printf("\n 1. insert ");
printf("\n");
printf("\n 2. ergod ");
printf("\n");
printf("\n 0|q quit ");
printf("\n");
printf("\n ");
key = getchar();
switch(key)
{
case '1':
insert(t, "");
printf("\n\n continue ");
getchar();
getchar();
break;
case '2':
printf("\n\n ergod... ");
ergod(t);
printf("\n\n continue ");
getchar();
getchar();
break;
case 'q':
case '0':
goto QUIT_FLAG;
}
}
QUIT_FLAG:
return 0;
}