news 2026/5/26 3:52:14

二叉树基础与排序算法解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
二叉树基础与排序算法解析

基本二叉树(空子树,左子树,右子树,完全二叉树,满二叉树)

二叉树的定义:

每个节点最多有两个子节点的树,通常称为右子节点,左子节点。

空子树:不包含任何节点

左子树:只有左边的节点

右子树:只有右边的节点

完全二叉树:除最外层其余层都是满的,是完全!!!连续不能断开的根节点到子节点

满二叉树:所有分支节点都有2个孩子,所有叶节点都在最后一层(就像树的叶子是最后一个连接的)

二叉树的性质

度 :从该节点出发的变

度0:没有节点

度1没有节点以此类推

叶的节点数

咱们的n0就代表度为0的数目,n1就是代表度为1,n2呢就是代表度为2。首先我们来看怎么推导的,这个也比较重要的。

首先树的总节点数,含有度为0和度1和度2的总和嘛,分别是n0,n1,n2.

还等于边数加上1,因为每个节点向上的连接线不就代表有一个节点吗,但根节点也算一个但没有向上的边,要加上一个就是(边数+1)等于所有节点数+1(不就相当于查伸了几个枝干加上最后一个根自己吗)

还等于前面不是说等于所有节点数加一嘛,节点数,不就是相当于每个度相加吗我们知道度0贡献0个节点就是0+度1贡献1*n1个度2贡献2*n2个综合就算n1+2n2+1这就能推导出

n0=n2+1;

每层的节点数

以上,是简易的二叉树的性质以及基础定义当然我们学这个东西只是为了方便我们学习算法

(写上个人理解,想我之前对数据结构了解没有那么深刻还有就是c语言(虽然现在也没有哈哈哈哈),我感觉就是链表的进阶版能够更好的处理一些问题,因为他设计到一些算法和计算后面我也会慢慢学习和总结的,我周末打算在做一个小项目来展示希望大家相互学习讨论,等到下个月或者是下下个月我会学完这个基础算法学习嵌入式开发板子的也会出一些详细的软件和开发的一些详细教程,希望大家有那些问题我们可以相互解决帮助)

和扩展我们的思维和运算能力,下面我们就开始学习简单的一些算法排序

冒泡排序

首先讲一下我们都熟悉的冒泡排序,什么是冒泡排序呢

  1. 比较相邻元素:从列表的第一个元素开始,比较相邻的两个元素。

  2. 交换位置:如果前一个元素比后一个元素大,则交换它们的位置。

  3. 重复遍历:对列表中的每一对相邻元素重复上述步骤,直到列表的末尾。这样,最大的元素会被"冒泡"到列表的最后。

  4. 缩小范围:忽略已经排序好的最后一个元素,重复上述步骤,直到整个列表排序完成

它是遍历,所有的元素,来把相邻的元素做对比然后交换位置

!!!注意注意这跟我我们生活当中的交换位置可不一样,在代码程序当中它是相当于找了个第三者,比如有一瓶可乐,一瓶果汁,这两瓶怎么交换呢,这就要用到我们的Temp空瓶子,先把可乐倒入空瓶里面,然后呢把果汁导入我们的可乐瓶,再把空瓶里面装的可乐瓶子倒入到我们原先的可乐瓶里面.

用代码的话就是 b = a; temp = b ; a = temp ;这下a和b的值就交换了剩下只有遍历就好了

这个冒泡排序的优点比较直观比较容易理解

缺点就是万一每个都要比较的话就是时间复杂度比较高的

  • 效率较低,尤其是对于大规模数据集。

  • 不适合处理几乎已经有序的列表,因为仍然需要进行多次遍历。

  • 时间复杂度为0(n2)

下面展示一下基础代码

首先就是遍历,之后就是交换

#include <stdio.h>
void bubble_sort(int arr[], int len) {
int i, j, temp;
for (i = 0; i < len - 1; i++)
for (j = 0; j < len - 1 - i; j++)
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
int main() {
int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
int len = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, len);
int i;
for (i = 0; i < len; i++)
printf("%d ", arr[i]);
return 0;
}

可能有的同学会问,这个前面学的栈里面,数组传入进去不是首地址吗,是的这是个好问题,它会把int arr[],看成int *arr ,在mian函数里面初始化的arr是在main函数结束后销毁的,当然也会在函数销毁掉。

有人会问了,这个在函数结束销毁掉那排序的呢,首先你可以理解main函数只知道arr房间的门牌号,传入了排序函数里面,它打开门之后把数字排序完之后,销毁忘记的只是门牌号和变量i,j,temp,房间内容已经被动了。

有哪些不理解的地方我们可以相互讨论谢谢大家!!!

我接下会创建一个群聊,希望我们学者也可以相互学习,我就是一个小白,不过可以帮助大学里面学习的基础c语言免费回答感谢感谢!!!QQ群号:238038904

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/26 4:53:30

小白必看:什么是WiFi密码字典及其基本用法

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个交互式WiFi密码字典学习应用&#xff0c;通过简单示例演示密码字典的工作原理。要求包含基础知识讲解、简单字典生成演示和实际应用场景说明。使用HTMLJavaScript实现可视化…

作者头像 李华
网站建设 2026/5/25 8:55:34

传统调试 vs AI辅助:解决Internal Server Error的效率对比

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 构建一个对比工具&#xff0c;左侧展示传统调试步骤&#xff08;查看日志、手动排查等&#xff09;&#xff0c;右侧展示AI辅助调试流程&#xff08;自动分析、建议修复&#xff09…

作者头像 李华
网站建设 2026/5/25 8:34:30

系统迁移时如何处理Temp文件夹?专家建议

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 开发一个系统迁移辅助工具&#xff0c;专门处理Temp目录&#xff1a;1) 分析临时文件使用情况 2) 智能识别需要保留的文件 3) 生成迁移报告 4) 支持自定义过滤规则 5) 与主流迁移工…

作者头像 李华
网站建设 2026/5/25 5:22:06

姬无烦科幻与张祥前统一场论的完美融合

姬无烦科幻与张祥前统一场论的完美融合 引言&#xff1a;科幻与科学的奇妙邂逅 当科幻作家的想象力与物理学家的公式相遇&#xff0c;会碰撞出怎样的火花&#xff1f; 在《外星文明与人类未来》这部姬无烦的科幻小说中&#xff0c;我们看到了一个充满奇迹的未来&#xff1a;飞碟…

作者头像 李华
网站建设 2026/5/26 3:57:21

Java并发编程面试题:ThreadLocal(8题)

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

作者头像 李华
网站建设 2026/5/25 9:09:48

消息队列设计:从同步到异步的性能突破

前言 2024年初&#xff0c;我们的订单系统经常出现"超时"问题。用户下单后&#xff0c;系统需要同时调用库存服务、支付服务、通知服务&#xff0c;任何一个服务慢都会导致整个请求超时。 我们决定引入消息队列&#xff0c;将同步调用改为异步处理。这个改造带来了…

作者头像 李华