C语言-二叉树
使用tree定义一个node指针地址,作为树块,node里面定义当前的val,左子树和右子树
02tree.h的定义
/* 二叉树 */ #include "02tree.h" void tree_init(tree *p_tree) { p_tree->p_node = NULL; //把方块里的指针形成一个空树(没有圆圈的树) } void tree_deinit(tree* p_tree) { if (!p_tree->p_node) { return ; } tree_deinit(&(p_tree->p_node->left)); tree_deinit(&(p_tree->p_node->right)); free(p_tree->p_node); p_tree->p_node = NULL; } tree* tree_search(tree* p_tree, int val) { if (!p_tree->p_node) { return (tree* )p_tree; } if (p_tree->p_node->val == val) { return (tree* )p_tree; } else if (p_tree->p_node->val > val) { return tree_search(&p_tree->p_node->left, val); } else { return tree_search(&p_tree->p_node->right, val); } } int tree_insert(tree* p_tree, int val) { node* p_node = NULL; tree* p_pos = tree_search(p_tree, val); if (p_pos->p_node) { return 0; } p_node = (node* )malloc(sizeof(node)); if(!p_node) { free(p_node); p_node = NULL; return 0; } p_node->val = val; p_node->left.p_node = NULL; p_node->right.p_node = NULL; p_pos->p_node = p_node; } void tree_miter(const tree* p_tree, pfunc_t p_func) { if (!p_tree->p_node) { return ; //没有数的情况下 } tree_miter(&p_tree->p_node->left, p_func); p_func(p_tree->p_node->val); tree_miter(&p_tree->p_node->right, p_func); }
02tree.c
/* 二叉树 */ #include "02tree.h" void tree_init(tree *p_tree) { p_tree->p_node = NULL; //把方块里的指针形成一个空树(没有圆圈的树) } void tree_deinit(tree* p_tree) { if (!p_tree->p_node) { return ; } tree_deinit(&(p_tree->p_node->left)); tree_deinit(&(p_tree->p_node->right)); free(p_tree->p_node); p_tree->p_node = NULL; } tree* tree_search(tree* p_tree, int val) { if (!p_tree->p_node) { return (tree* )p_tree; } if (p_tree->p_node->val == val) { return (tree* )p_tree; } else if (p_tree->p_node->val > val) { return tree_search(&p_tree->p_node->left, val); } else { return tree_search(&p_tree->p_node->right, val); } } int tree_insert(tree* p_tree, int val) { node* p_node = NULL; tree* p_pos = tree_search(p_tree, val); if (p_pos->p_node) { return 0; } p_node = (node* )malloc(sizeof(node)); if(!p_node) { free(p_node); p_node = NULL; return 0; } p_node->val = val; p_node->left.p_node = NULL; p_node->right.p_node = NULL; p_pos->p_node = p_node; } void tree_miter(const tree* p_tree, pfunc_t p_func) { if (!p_tree->p_node) { return ; //没有数的情况下 } tree_miter(&p_tree->p_node->left, p_func); p_func(p_tree->p_node->val); tree_miter(&p_tree->p_node->right, p_func); }
02main.c
/* 二叉树主函数 */ #include "02tree.h" void print(int val) { printf("%d ", val); } int main() { tree t = {0}; tree_init(&t); tree_insert(&t, 10); tree_insert(&t, 20); tree_miter(&t, print); printf("\n"); tree_deinit(&t); }
每天更新pyQt5内容
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?