实验6 数据结构
- 格式:docx
- 大小:13.10 KB
- 文档页数:3
#include<stdio.h>
#include<stdlib.h>
#define TREE_TYPE int
typedef struct TREE_NODE{
TREE_TYPE value;
struct TREE_NODE *left; //左结点指针
struct TREE_NODE *right; //右结点指针
}TreeNode;
//连接temp和tree两个节点
TreeNode* link(TreeNode *temp,TreeNode *tree,int key) {
tree = (TreeNode*)malloc(sizeof(TreeNode));
if(temp != NULL)
if(temp->value > key)
temp->left = tree;
else
temp->right = tree;
tree->value = key;
tree->left = NULL;
tree->right = NULL;
return tree;
}
//插入并建立二叉树
TreeNode * insert(TreeNode *tree,int key)
{
TreeNode *temp = NULL,*p = tree;
if(tree != NULL)
{
while(tree != NULL && tree->value != key)
{
if(tree->value > key)
{
temp=tree;
tree = tree->left;
}
else
{
temp=tree;
tree = tree->right;
}
}
tree = link(temp,tree,key);
}
else//if(tree == NULL)
{
tree = link(temp,tree,key);
//将下面注释掉的代码单独写成了一个函数
/*tree = (TreeNode*)malloc(sizeof(TreeNode));
tree->value = key;
tree->left = NULL;
tree->right = NULL;*/
}
if(p != NULL)
tree = p;
return tree;
}
//先序遍历************************************************** void print1(TreeNode *tree)
{
if(tree)
{
printf("%3d,",tree->value);
print1(tree->left);
print1(tree->right);
}
}
//中序遍历************************************************* void print2(TreeNode *tree)
{
if(tree)
{
print2(tree->left);
printf("%3d,",tree->value);
print2(tree->right);
}
}
//后序遍历************************************************* void print3(TreeNode *tree)
{
if(tree != NULL)
{
print3(tree->left);
print3(tree->right);
printf("%3d,",tree->value);
}
}
int main()
{
int key,i;
TreeNode *tree;
tree = NULL;
printf("请输入整型数:(以任意字符结束)\n");
while(1)
{
i = scanf("%d",&key);
if(i != 1)
break;
tree = insert(tree,key);
}
printf("\n先序遍历:");
print1(tree);
printf("\n中序遍历:");
print2(tree);
printf("\n后序遍历:");
print3(tree);
printf("\n");
system("pause");
return 0;
}。