news 2026/2/10 12:15:37

二叉排序树的建立和插入

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉排序树的建立和插入

(一).二叉排序树是很关键的,二叉排序树的构造是根节点比左子树上的所有值要大,比右子树上的值都有小, 二叉排序树中的所有子树都是这样的性质,可以和二叉树的中序遍历联系起来,二叉树的中序遍历是左根右,按照上述所说的,二叉树排序树的中序遍历是有序地递增的,这篇文章就证明一下二叉树排序树的中序遍历是有序的。

1.首先构建一个结构体类型,和二叉树一样,有左右孩子指针,一个数据域

typedef struct BSTNode { int data; struct BSTNode* lchild, * rchild;//左右孩子指针 }BSTNode,*BSTree;//第二个重命名的是个指针

2.创建一个数组,利用数组个二叉排序树赋值,其主要思想就是二叉排序树的插入操作,其中比较坑的一点是插入时递归,需要弄清楚为什么不用链接到新开辟的节点。创建一个creat_BST函数,将值一个一个插入到二叉排序树,插入操作使用是递归,其中前两个条件是结束递归的终止条件,不可以缺少,二叉排序树中不能有重复的数字,传入的是二级指针,对二级指针解引用可以改变值,当传入的这个关键字比节点值小就要沿着左边孩子对比,反之就是向着右边孩子对比。

int insert_BST(BSTree* T, int k) { if (*(T) == NULL)//终止条件 { (*T) = (BSTNode*)malloc(sizeof(BSTNode)); if ((*T) == NULL) return 1; (*T)->data = k; (*T)->lchild = (*T)->rchild = NULL; return 1; } if ((*T)->data == k)//终止条件 return 0; else if ((*T)->data < k) { return insert_BST(&((*T)->rchild), k);//传入右边孩子 } else { return insert_BST(&((*T)->lchild), k); } } void creat_BST(BSTree*T,int arr[], int sz) { (*T) = NULL; for (int i = 0; i < sz; i++) { insert_BST(T, arr[i]); } }

3.二叉排序树的中序遍历

void print(BSTree T) { if (T == NULL) return; print(T->lchild); printf("%d ", T->data); print(T->rchild); }

传入 5 6 9 8 7 4 1 2 3 10 构建的二叉排序树图片应该是这样的,中序遍历是这样的,满足有序递增。

(二).整体代码

typedef struct BSTNode { int data; struct BSTNode* lchild, * rchild;//左右孩子指针 }BSTNode,*BSTree;//第二个重命名的是个指针 int insert_BST(BSTree* T, int k) { if (*(T) == NULL)//终止条件 { (*T) = (BSTNode*)malloc(sizeof(BSTNode)); if ((*T) == NULL) return 1; (*T)->data = k; (*T)->lchild = (*T)->rchild = NULL; return 1; } if ((*T)->data == k)//终止条件 return 0; else if ((*T)->data < k) { return insert_BST(&((*T)->rchild), k);//传入右边孩子 } else { return insert_BST(&((*T)->lchild), k); } } void creat_BST(BSTree*T,int arr[], int sz) { (*T) = NULL; for (int i = 0; i < sz; i++) { insert_BST(T, arr[i]); } } void print(BSTree T) { if (T == NULL) return; print(T->lchild); printf("%d ", T->data); print(T->rchild); } int main() { BSTree T; int arr[10] = { 0 }; int i = 0; int sz = sizeof(arr) / sizeof(arr[0]); for (i = 0; i < sz; i++) { scanf("%d", &arr[i]); } creat_BST(&T,arr, sz); print(T); }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/7 1:17:44

字节跳动AHN:让Qwen2.5实现超长文本高效处理

字节跳动AHN&#xff1a;让Qwen2.5实现超长文本高效处理 【免费下载链接】AHN-Mamba2-for-Qwen-2.5-Instruct-14B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/AHN-Mamba2-for-Qwen-2.5-Instruct-14B 导语&#xff1a;字节跳动推出的AHN&#xff08;A…

作者头像 李华
网站建设 2026/2/7 14:10:33

Qwen3-VL-8B-Thinking:AI视觉推理终极升级!

Qwen3-VL-8B-Thinking&#xff1a;AI视觉推理终极升级&#xff01; 【免费下载链接】Qwen3-VL-8B-Thinking 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/Qwen3-VL-8B-Thinking Qwen3-VL-8B-Thinking作为Qwen系列最新视觉语言模型&#xff0c;凭借视觉代理能力…

作者头像 李华
网站建设 2026/2/9 19:32:37

Qwen3-VL提取Mathtype插件功能说明:Word公式工具对比分析

Qwen3-VL提取Mathtype插件功能说明&#xff1a;Word公式工具对比分析 在科研、教育和工程文档中&#xff0c;数学公式的数字化处理长期面临“看得见、改不了”的困境。一份扫描版教材里的高斯积分表达式&#xff0c;或是一篇PDF论文中的矩阵推导过程&#xff0c;虽然清晰可读&a…

作者头像 李华
网站建设 2026/2/7 10:58:19

面向高职教育的Proteus仿真软件教学模式:核心要点

用Proteus做电子实训&#xff0c;高职生也能玩转“软硬一体”开发你有没有遇到过这样的场景&#xff1a;学生上完单片机课&#xff0c;代码写得头头是道&#xff0c;可一到实验室面对开发板却手足无措&#xff1f;明明讲了三遍IC通信时序&#xff0c;结果连线接反、地址写错、电…

作者头像 李华
网站建设 2026/2/8 9:42:03

终极解决方案:如何用pan-baidu-download突破百度网盘下载限制

终极解决方案&#xff1a;如何用pan-baidu-download突破百度网盘下载限制 【免费下载链接】pan-baidu-download 百度网盘下载脚本 项目地址: https://gitcode.com/gh_mirrors/pa/pan-baidu-download 还在为百度网盘的龟速下载而烦恼吗&#xff1f;面对大文件下载时的漫长…

作者头像 李华
网站建设 2026/2/10 0:55:14

Qwen3-VL罕见字符处理能力测试:古代文献与专业术语轻松应对

Qwen3-VL罕见字符处理能力测试&#xff1a;古代文献与专业术语轻松应对 在数字化浪潮席卷各行各业的今天&#xff0c;一个长期被忽视的问题正逐渐浮出水面&#xff1a;那些承载着人类文明记忆的古籍、手稿、碑文和专业档案&#xff0c;如何才能真正“活”起来&#xff1f;我们早…

作者头像 李华