#include "tree.h"
// 插入节点
void insert_node(Tree_Node **root, Element_data data)
{
if (NULL == (*root))
{
// 创建节点
Tree_Node *new_node = (Tree_Node *)malloc(sizeof(Tree_Node ));
if (NULL == new_node)
{
ERRLOG("动态创建空间失败")
return ;
}
// 写入数据
new_node->data = data;
new_node->lchilb = NULL;
new_node->rchilb = NULL;
printf("%s插入成功\n", data.name);
// 将root和new_node连接
(*root) = new_node;
return;
}
if (data.id < (*root)->data.id)
{
// 左孩子
insert_node(&(*root)->lchilb, data);
return;
}
else // 右孩子
{
insert_node(&(*root)->rchilb, data);
return;
}
return;
}
// 先序遍历 根 左 右 preorder_traversal
void pre_rder(Tree_Node *root)
{
if (NULL != root)
{
// 打印
printf("%s\t%s\t%d\t%d\t%d\n",
root->data.name, root->data.sex, root->data.age,
root->data.id, root->data.sco);
// 左
pre_rder(root->lchilb);
// 右
pre_rder(root->rchilb);
}
return;
}
// 释放 左 右 根
void free_tree(Tree_Node **root)
{
if (NULL != root)
{
// 左
free(&(*root)->lchilb);
// 右
free(&(*root)->rchilb);
// 释放
printf("%s释放成功\n", (*root)->data.name);
free(*root);
*root = NULL;
}
return;
}[code]#include "tree.h"
Element_data data[10] =
{
{.name = "唐三", .sex = "男", .age = 18, .id = 1, .sco = 60},
{.name = "萧炎", .sex = "男", .age = 18, .id = 2, .sco = 60},
{.name = "小舞", .sex = "男", .age = 18, .id = 3, .sco = 60},
{.name = "牧尘", .sex = "男", .age = 18, .id = 4, .sco = 60},
{.name = "熏儿", .sex = "男", .age = 18, .id = 5, .sco = 60},
{.name = "张三", .sex = "男", .age = 18, .id = 6, .sco = 60},
};
int main(void)
{
// 创建树
Tree_Node *root = NULL;
insert_node(&root, data[0]);
insert_node(&root, data[1]);
insert_node(&root, data[2]);
insert_node(&root, data[3]);
insert_node(&root, data[4]);
insert_node(&root, data[5]);
// 根左右
pre_rder(root);
// 释放
free_tree(&root);
return 0;
}[code]#ifndef _ELEMENT_H__
#define _ELEMENT_H__
// 引入头文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
// 声明数据对象
typedef struct Element_data
{
char name[128]; // 姓名
char sex[10]; // 性别
int age; // 年纪
int id; // 学号
int sco; // 成绩
} Element_data;
// 用于报错的宏函数
#define ERRLOG(STR) \
do \
{ \
printf("文件: %s 函数: %s 行: %d 报错信息: %s\n", __FILE__, __func__, __LINE__, STR); \
} while (0);
#endif
[code]#ifndef __TREE_H__
#define __TREE_H__
// 头文件包含
#include "../../include/Element_data.h"
// 定义树节点结构体
typedef struct Tree_Node
{
Element_data data;
struct Tree_Node *lchilb; // 左节点
struct Tree_Node *rchilb; // 右节点
} Tree_Node;
// 初始化二叉树
int init_binary_tree(Tree_Node **root);
// 插入节点
void insert_node(Tree_Node **root, Element_data data);
// 先序遍历 根 左 右 preorder_traversal
void pre_rder(Tree_Node *root);
// 释放 左 右 根
void free_tree(Tree_Node **root);
#endif
[/code][/code][/code]