当前位置: 首页 > news >正文

数据结构-BST树

二叉查找树:BST树(Binary Search Tree),二叉查找树的结点是有键值key的;左子树的结点的键值key要小于左子树的根结点的键值key,右子树的结点的键值key要大于右子树的根结点的键值key,左子树和右子树也分别是二叉查找树,二叉查找树的结点的键值key是不重复的。
1.结构体

typedef int DataType_t;
typedef struct BSTreeNode
{DataType_t  		 data; 		//节点的键值struct BSTreeNode	*lchild; 	//左子树的指针域struct BSTreeNode	*rchild; 	//右子树的指针域}BSTnode_t;

2.新建一颗BST树

BSTnode_t* CreateBtree_Node(DataType_t value)
{BSTnode_t* root = (BSTnode_t*)malloc(sizeof(BSTnode_t));if(root == NULL){printf("内存分配失败\n");exit(-1);}root->lchild = NULL;root->rchild = NULL;root->data = value;return root;
}

3.插入新的键值

  • 利用循环插入
bool EnBstTree(BSTnode_t *root,DataType_t value)
{BSTnode_t* newNode = CreateBtree_Node(value);if(newNode == NULL){return false;}BSTnode_t* current = root;while (current){if(value == current->data){printf("BST树中已存在值为%d的节点,无法插入重复节点\n", value);free(newNode);return false;}if(value < current->data){    //新键值小于根节点进入左子树if(current->lchild == NULL){current->lchild = newNode;return true;}current = current->lchild;}else{                        //新键值大于根节点进入右子树if(current->rchild == NULL){current->rchild = newNode;return true;}current = current->rchild;}}return true;
}
  • 利用递归插入
BSTnode_t* En_BstTree(BSTnode_t *root,DataType_t value)
{if(root == NULL){return CreateBtree_Node(value);}if(root->data > value){           //相等的情况不做处理root->lchild=En_BstTree(root->lchild,value);}else{root->rchild=En_BstTree(root->rchild,value);}return root; //让插入动作只发生在那个空指针位置,其它部分保持原状
}

4.遍历BST树

  • 前序遍历
bool PreOrder(BSTnode_t* root) //根左右
{if(root ==NULL){return false;}printf("%d ",root->data);PreOrder(root->lchild);PreOrder(root->rchild);return true;
}
  • 中序遍历
bool InOrder(BSTnode_t* root) //左根右
{if(root ==NULL){return false;}InOrder(root->lchild);printf("%d ",root->data);InOrder(root->rchild);return true;
}
  • 后序遍历
bool PostOrder(BSTnode_t* root) //左右根
{if(root ==NULL){return true;}PostOrder(root->lchild);PostOrder(root->rchild);printf("%d ",root->data);return true;
}
http://www.jsqmd.com/news/201559/

相关文章:

  • 【计算机毕业设计案例】基于python深度学习的乐器识别卷神经网络
  • NEXUS系统天地开发效率提升秘籍
  • 效率对比:GRADIO vs 传统前端开发,速度提升800%
  • 计算机深度学习毕设实战-基于机器学习卷积神经网络对不同柑橘病变识别
  • 对比传统方案:FLV.JS如何提升视频开发效率10倍
  • 从3小时到3分钟:AI如何大幅缩短Docker环境排障时间
  • CODEX入门指南:零基础学会AI编程
  • 如何用AI加速密码破解工具开发
  • 零基础学Pandas:数据分析第一课
  • zz几个多智能体的资源
  • 用CLAUDE快速验证产品创意:3个原型案例
  • 深度学习计算机毕设之深度学习基于卷积神经网络对不同柑橘病变识别
  • DIFY实战:从零构建智能客服系统的完整指南
  • 深度学习毕设项目:基于卷积神经网络对不同柑橘病变识别
  • 用PaddleOCR快速验证OCR创意:从想法到原型只需1小时
  • SE8NET国产芯片如何借助AI加速开发流程
  • 告别龟速传输:XFTP性能优化全攻略
  • 对比测试:VSPD方案vs传统硬件调试效率提升300%
  • VSCode高效开发:10个必知快捷键与工作流优化
  • 【毕业设计】基于卷积神经网络对不同柑橘病变识别
  • 用Typora+AI快速原型设计:1小时完成产品文档MVP
  • 【课程设计/毕业设计】基于人工智能 卷积神经网络对不同柑橘病变识别
  • 电商库存管理:VLOOKUP跨表匹配实战案例
  • 基于SE8NET免费API的天气应用开发实战
  • AI助力9·1免费版安装:智能解决常见问题
  • 1分钟原型:自制Vue环境检测工具解决CLI报错
  • 1小时搭建Redis面试Demo:6大考点可视化展示
  • 零基础入门:用COZE创建你的第一个AI应用
  • AI入门必学:智能体设计模式实战指南
  • 基于springboot的学生选课成绩学习报告学业跟踪评价系统(编号:61317366)vue3