二叉搜索树(BST)
📅 2026/7/25 9:34:11
👁️ 次浏览
1、什么是BST(Binary Search Tree)二叉搜索树也叫二叉搜索树或二叉排序树其核心的递归性质如下对于树中任意一个节点该节点左子树中所有节点的值 当前节点值该节点右子树中所有节点的值 当前节点值左、右子树本身也必须是二叉搜索树一般BST不允许重复关键字如果有需要应当添加约定将重复值统一 放在左子树 / 右子树中。2、BST的具体实现依据BST的性质我们可以构建一个BST并实现一些常用的基础操作· 节点定义#include stdio.h #include stdlib.h typedef struct bstNode { int val; struct bstNode* left; struct bstNode* right; }bstNode;· 创建节点并插入bstNode* create_bstNode(int val) { bstNode* node malloc(sizeof(bstNode)); if (!node) { perror(malloc); exit(EXIT_FAILURE); } node-val val; node-left NULL; node-right NULL; return node; } bstNode* bstInsert(bstNode *root,int val) { if (!root) return create_bstNode(val); //如果当前节点为空则直接插入 if (val root-val) root-left bstInsert(root-left, val); //若val小于节点值则在节点的左子树中插入 else if (val root-val) root-right bstInsert(root-right, val); //若val大于节点值则在节点的右子树中插入 /* 相等则不插入 */ return root; }· 注这里插入一下perror的头文件与原型为#include stdio.h void perror(const char *s);其作用是打印自定义字符串s再紧跟一个冒号并自动读取全局变量errno系统最近一次调用出错的错误码将错误码翻译成对应的文字错误描述一并输出到标准错误 (stderr)。exit的头文件与原型为#include stdlib.h void exit(int status);exit的核心作用是终止整个当前进程退出程序。exit(0)表示程序正常结束exit(非0)则表明程序异常退出用来告知系统出错类型。stdlib.h中还声明了#define EXIT_SUCCESS 0 #define EXIT_FAILURE 1· 删除节点bstNode* findMIN(bstNode* root) //找到最小值 { while (root-left) root root-left; return root; } bstNode* bstDelete(bstNode *root,int val) { if (!root) return NULL; if (val root-val) root-left bstDelete(root-left, val); else if (val root-val) root-right bstDelete(root-right, val); else { /* S1叶子节点 */ if (!root-left !root-right) { free(root); return NULL; } /* S2只有右孩子 */ if (!root-left) { bstNode* tmp root-right; free(root); return tmp; } /* S3只有左孩子 */ if (!root-right) { bstNode* tmp root-left; free(root); return tmp; } /* S4左右孩子都有 */ bstNode* tmp findMIN(root-right); root-val tmp-val; root-right bstDelete(root-right, tmp-val); } return root; }· findMIN根据BST的性质找最小值只需要一直找到最左侧的叶子节点即可。· bstDeleteBST的删除会稍微复杂一些下面梳理一下我个人的想法。函数bstDelete可以描述为“永远返回当前递归所处理的这颗子树的新根”。在递归过程中只有找到被删除值的那层递归会直接执行删除操作其余递归层则会根据子树的新的根节点更新自己的左 / 右孩子指针并返回自身作为当前子树的新根。因此在main中调用时会写成root bstDelete(root val);S1——待删除节点是叶子节点叶子那一层返回了NULL表示这棵叶子子树不存在了父节点把对应的孩子指针置为NULL随后父节点返回自己这时更高层次的结构不会发生变化。S2、S3——待删除节点只有一个子节点 / 子树释放当前节点并返回其唯一的子节点作为当前子树的新根。S4——待删除节点有两个子节点 / 子树通过findMIN(root-right)找到当前节点右子树的最小值即当前节点的中序后继节点用后继节点的值覆盖当前节点然后在当前节点的右子树中递归删除后继节点而由于后继节点一定没有左孩子因此此次删除必定退化为S1或S2。· 查找节点bstNode* bstSearch(bstNode* root, int val) { if (!root) return NULL; if (root-val val) return root; if (val root-val) return bstSearch(root-left, val); return bstSearch(root-right, val); }该函数的返回结果是待查值val的节点。· 中序遍历void Inorder(bstNode* root) { if (!root) return; Inorder(root-left); printf(%d ,root-val); Inorder(root-right); }作为一颗BST其中序遍历一定是升序的在测试时也可根据此判断构建的BST是否正确。· 删除整棵树void bstFree(bstNode *root) { if (!root) return; bstFree(root-left); bstFree(root-right); free(root); //注意要先free孩子节点再free父节点 }
1. 项目概述:AI视频生成技术革新 最近测试了扣子平台的Seedance 2.0视频生成功能,这个多模态AI模型确实带来了不少惊喜。作为字节跳动旗下的一站式AI开发平台,扣子(Coze)整合了从脚本创作到视频输出的全流程工具链&…
📅 2026/7/26 0:38:57
80%的SKU日销量经常为零,这就是你的模型总在长尾商品上失效的根本原因。本文深入拆解间歇性需求的数学本质,并给出两阶段XGBoost的完整实现——这是我见过处理长尾问题最有效的实用方案。
一、什么是间歇性需求?为什么它如此棘手?…
📅 2026/7/25 7:05:44
《经济学人》风格图表/数据可视化的解读与创建在企业 BI、大屏驾驶舱和数据新闻领域,很多团队把大量精力放在图表设计上,却忽略了另一个同样重要的组成部分——数据表格(Table/Grid)。事实上,《经济学人(Th…
📅 2026/7/24 14:08:51
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/26 0:39:19
很多开发者在使用AI编程工具时,会把“重试”当成最直接的恢复方式。命令执行失败,重新运行一次。
测试没有通过,让Codex继续修复。
结果偏离需求,再补充一段提示。
任务中断以后,让ChatGPT接着往下做。在简单任务中&am…
📅 2026/7/26 0:39:19
本文列举了AI在制造业、农业、零售业等10个行业的实际应用案例,展示AI如何通过自动化、预测和优化提升效率、降低成本。从制造业的智能质检到农业的精准种植,从零售业的智能库存管理到金融业的快速信贷审批,AI正以具体、务实的方式重塑各行各…
📅 2026/7/26 0:39:19
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/26 0:39:19
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/26 0:39:19
昨晚半夜两点,我还在阳台上折腾那个破天线。风挺大,吹得脸生疼。手里拿着扳手,螺丝拧得手指头都磨红了。心里那个烦躁啊,真的,想骂人。之前一直以为买个锅就能看,太天真了。其实geo 卫星系统 接收没那么简单,全是坑。我家这位置,前面有栋高楼挡着,信号差得要命。试了好…
📅 2026/7/26 0:38:41
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/26 0:00:06
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/26 0:00:06
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/26 0:00:06
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/26 0:00:06
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/26 0:00:06
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/26 0:00:06
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/25 7:09:18
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/25 17:09:47
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/25 5:09:14