#include<stdio.h>
#include<stdlib.h>
//树节点
typedef struct _Node
{
int data;
struct _Node* left;//左孩子
struct _Node* right;//右孩子
}Node;
//树根
typedef struct _Tree
{
Node* root;
}Tree;
//树中插入元素
void insert(Tree* tree,int data)
{
//创建一个节点
Node* node = (Node*)malloc(sizeof(Node));
node->data = data;
node->left = NULL;
node->right = NULL;
//判断树是否为空树
if (tree->root == NULL)
{
tree->root = node;
}
else//不是空数
{
Node* temp = tree->root;//从树根开始不断对比,插入到合适的位置
while (temp!=NULL)
{
//小于左孩子的值
if (data<temp->data)
{
if (temp->left == NULL)
{
temp->left = node;
return;
}
else
{
temp = temp->left;
}
}
else//大于左孩子的值
{
if (temp->right == NULL)
{
temp->right = node;
return;
}
else
{
temp = temp->right;
}
}
}
}
}
//中序遍历
void travse(Node* node)
{
if (node!=NULL)
{
travse(node->left);
printf("%d ", node->data);
travse(node->right);
}
}
/*销毁一棵树*/
void distory_tree(Node* node)
{
if (node!=NULL)
{
distory_tree(node->left);
distory_tree(node->right);
printf("free data:%d \n", node->data);
free(node);
node = NULL;
}
}
int main()
{
int n;
Tree tree;
tree.root = NULL;
printf("请输入要添加数据的个数:\n");
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
int temp;
scanf("%d", &temp);
insert(&tree,temp);
}
printf("遍历输出:");
//遍历整个树
travse(tree.root);
putchar('\n');
//销毁一棵树
distory_tree(tree.root);
system("pause");
return 0;
}
C语言--树结构
最新推荐文章于 2025-05-28 18:02:27 发布