树是一种非线性的数据结构,它由节点组成,并且这些节点之间通过边连接。树的每个节点可以有一个或多个子节点,并且有一个特殊的节点叫做根节点(没有父节点)。

树在计算机科学中应用广泛,尤其是在数据库索引、编译器设计和搜索算法等方面。

树的基本知识点


节点

包含数据以及指向其子节点的引用或链接。

连接两个节点之间的关系。

根节点

树的最顶端节点,唯一没有父节点的节点。

叶子节点

没有子节点的节点。

父节点与子节点

直接相连的上下层节点间的关系。

深度

从根到某个节点的路径长度。

高度

从某节点到叶子节点的最大路径长度。树的高度是指根节点的高度。

子树

由一个节点及其所有后代节点组成的树。

遍历

访问树中所有节点的过程,常见的遍历方法包括前序遍历、中序遍历、后序遍历和层次遍历。

常见类型的树

二叉树

每个节点最多有两个子节点。

二叉查找树(BST)

左子树上所有节点的值都小于它的根节点的值;右子树上所有节点的值都大于它的根节点的值。

平衡二叉树

如AVL树或红黑树,它们通过某些机制保持树的平衡,确保基本操作的时间复杂度为O(log n)。

一种特殊的完全二叉树,分为最大堆和最小堆。


具体的代码框架如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef char DATATYPE;
typedef struct BiTNode  /* 结点结构 */
{DATATYPE data;		/* 结点数据 */struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode;char dat[]="abd##eh###c#fi###";
int ind;void CreateTree(BiTNode**root)
{char c = dat[ind++];if('#'==c){*root = NULL;}else  {*root = malloc(sizeof(BiTNode));if(NULL == *root ){printf("malloc error\n");return ;}(*root)->data = c;CreateTree(& (*root)->lchild);CreateTree(& (*root)->rchild);}return ;
}/*** @brief  根左右   前序* * @param root */
void PreOrderTraverse(BiTNode*root)
{if(NULL==root ){return ;}else  {printf("%c",root->data);//root PreOrderTraverse(root->lchild);// liftPreOrderTraverse(root->rchild);// right}}
/*** @brief 左根右   中序* * @param root */
void InOrderTraverse(BiTNode* root)
{if(NULL == root){return ;}InOrderTraverse(root->lchild);printf("%c",root->data);InOrderTraverse(root->rchild);
}/*** @brief 左右根    后序* * @param root */
void PostOrderTraverse(BiTNode* root)
{if(NULL == root){return ;}PostOrderTraverse(root->lchild);PostOrderTraverse(root->rchild);printf("%c",root->data);
}void DestroyBiTree(BiTNode*root)
{if(NULL ==root){return ;}DestroyBiTree(root->lchild);DestroyBiTree(root->rchild);free(root);}int	main(int argc, char **argv)
{BiTNode* root=NULL;CreateTree(&root);PreOrderTraverse(root);printf("\n");InOrderTraverse(root);printf("\n");PostOrderTraverse(root);printf("\n");DestroyBiTree(root);// system("pause");return 0;
}
//层序遍历
#define MAX_QUEUE_SIZE 100typedef struct {BiTNode* data[MAX_QUEUE_SIZE];int front;int rear;
} Queue;// 初始化队列
void InitQueue(Queue* q) {q->front = 0;q->rear = 0;
}// 判断队列是否为空
int IsQueueEmpty(Queue* q) {return q->front == q->rear;
}// 入队
void EnQueue(Queue* q, BiTNode* node) {if ((q->rear + 1) % MAX_QUEUE_SIZE == q->front) {printf("Queue is full\n");return;}q->data[q->rear] = node;q->rear = (q->rear + 1) % MAX_QUEUE_SIZE;
}// 出队
BiTNode* DeQueue(Queue* q) {if (IsQueueEmpty(q)) {return NULL;}BiTNode* node = q->data[q->front];q->front = (q->front + 1) % MAX_QUEUE_SIZE;return node;
}// 层序遍历
void LevelOrderTraverse(BiTNode* root) {if (NULL == root) {return;}Queue queue;InitQueue(&queue);EnQueue(&queue, root);while (!IsQueueEmpty(&queue)) {BiTNode* node = DeQueue(&queue);if (node != NULL) {printf("%c", node->data);  // 访问当前节点EnQueue(&queue, node->lchild);  // 左孩子入队EnQueue(&queue, node->rchild);  // 右孩子入队}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/90919.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/90919.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/90919.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车辆网络安全规定之R155与ISO/SAE 21434

随着科技的不断进步&#xff0c;车辆已经从传统的机械装置演变为高度智能化的移动终端。现代汽车不仅配备了先进的驾驶辅助系统&#xff08;ADAS&#xff09;、车载信息娱乐系统&#xff08;IVI&#xff09;&#xff0c;还具备联网功能&#xff0c;能够实现远程诊断、自动驾驶、…

Go语言实战案例-合并多个文本文件为一个

以下是《Go语言100个实战案例》中的 文件与IO操作篇 - 案例21&#xff1a;合并多个文本文件为一个 的完整内容&#xff0c;适用于初学者学习文件读取与写入的综合运用。&#x1f3af; 案例目标使用 Go 语言将指定目录下的多个 .txt 文件&#xff0c;合并成一个新的总文件。&…

基坑渗压数据不准?选对渗压计能实现自动化精准监测吗?

一、渗压监测的背景 渗压计是一种专门用于测量构筑物内部孔隙水压力或渗透压力的传感器&#xff0c;适用于长期埋设在水工结构物或其它混凝土结构物及土体内&#xff0c;以测量结构物或土体内部的渗透&#xff08;孔隙&#xff09;水压力。 在水利工程中&#xff0c;大坝、水库…

Linux网络:阿里云轻量级应用服务器配置防火墙模板开放端口

1.问题介绍在使用Udp协议或其他协议进行两台主机或同一台主机通信时&#xff0c;常常会出现bind成功&#xff0c;但是在客户端向服务端发送数据后&#xff0c;服务端无响应的情况&#xff0c;如果使用轻量级应用服务器&#xff0c;大概率是服务器的端口因为防火墙未对公网IP开放…

《 Spring Boot整合多数据源:分库业务的标准做法》

&#x1f680; Spring Boot整合多数据源&#xff1a;分库业务的标准做法 文章目录&#x1f680; Spring Boot整合多数据源&#xff1a;分库业务的标准做法&#x1f50d; 一、为什么需要多数据源支持&#xff1f;&#x1f4a1; 典型业务场景⚙️ 二、多数据源集成方案对比&#…

前端ApplePay支付-H5全流程实战指南

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档前言近期公司开展关于苹果支付的相关业务&#xff0c;与之前不同的是&#xff0c;以前后台直接获取第三方Wallet封装好的接口获取支付地址&#xff0c;H5页面直接跳转使用Appl…

Flink窗口:解锁流计算的秘密武器

Flink 窗口初识在大数据的世界里&#xff0c;数据源源不断地产生&#xff0c;形成了所谓的 “无限数据流”。想象一下&#xff0c;网络流量监控中&#xff0c;每一秒都有海量的数据包在网络中穿梭&#xff0c;这些数据构成了一个无始无终的流。对于这样的无限数据流&#xff0c…

Java排序算法之<希尔排序>

目录 1、希尔排序介绍 1.1、定义 1.2、核心思想 2、希尔排序的流程 第 1 轮&#xff1a;gap 4 第 2 轮&#xff1a;gap 2 第 3 轮&#xff1a;gap 1 3、希尔排序的实现 4、时间复杂度分析 5、希尔排序的优缺点 6、适用场景 前言 希尔排序&#xff08;Shell Sort&…

c++加载qml文件

这里展示了c加载qml文件的三种方式以及qml文件中根节点的访问准备在创建工程的初期&#xff0c;遇到了一个问题&#xff0c;cmake文件以前都是系统自动生成的&#xff0c;不需要我做过多的操作修改&#xff0c;但是&#xff0c;加载qml的程序主函数是需要用到QGuiApplication&a…

007TG洞察:GPT-5前瞻与AI时代竞争力构建:技术挑战与落地路径

最近&#xff0c;GPT-5 即将发布的消息刷爆了科技圈&#xff0c;更让人期待的是&#xff0c;GPT-6 已经悄悄启动训练了&#xff0c;OpenAI 的奥特曼表示对未来1-2年的模型充满信心&#xff0c;预测AI将进化为能够发现新知识的“AI科学家”。面对日益强大的通用AI&#xff0c;企…

Windows下编译OpenVDB

本文记录在Windows下编译OpenVDB的流程。 零、环境 操作系统Windows 11VS Code1.92.1Git2.34.1MSYS2msys2-x86_64-20240507Visual StudioVisual Studio Community 2022CMake3.22.1 一、编译 1.1 下载 git clone https://github.com/AcademySoftwareFoundation/openvdb.git …

react 内置hooks 详细使用场景,使用案例

useState场景&#xff1a;组件中管理局部状态&#xff0c;如表单值、开关、计数器等。const [count, setCount] useState(0); return <button onClick{() > setCount(count 1)}>Click {count}</button>;useEffect 场景&#xff1a;组件挂载时执行副作用&#…

从0到1学Pandas(九):Pandas 高级数据结构与操作

目录一、探秘多级索引1.1 创建多级索引1.2 多级索引操作1.3 索引转换二、探索 Panel 与 xarray2.1 Panel 数据结构2.2 xarray 库2.3 高维数据操作三、时间序列高级应用3.1 时区处理3.2 时间序列重采样与频率转换3.3 时间序列分解与预测四、数据透视与重塑高级技巧4.1 复杂透视表…

C# 图像转换实战:Bitmap 转 BitmapSource 的 2 种方法

C# 图像转换实战:Bitmap 转 BitmapSource 的 2 种方法 引言 两种转换方法的完整实现 1. 基于GDI句柄的直接转换 (ToBitmapSourceFast) 2. 基于内存流的编码转换 (ToBitmapSourceSafe) 方法对比与选型指南 避坑指南 GDI句柄泄漏问题 图像显示不完整 多线程访问图像引发异常 不同…

Spring Boot 整合 Spring MVC:自动配置与扩展实践

Spring MVC 作为 Java Web 开发的核心框架&#xff0c;在传统 SSM 项目中需要大量 XML 配置&#xff08;如 DispatcherServlet、视图解析器等&#xff09;。而 Spring Boot 通过 "自动配置" 特性&#xff0c;简化了 Spring MVC 的整合过程&#xff0c;同时保留了灵活…

print(“\033[31m红\033[32m绿\033[34m蓝\033[0m默认色“)

可以让python的终端字体有着不一样的颜色。代码&#xff1a;print("\033[31m红\033[32m绿\033[34m蓝\033[0m默认色")效果&#xff1a;

LNMP-zblog分布式部署

一、准备3台主机&#xff08;rocky8&#xff09;下载相应服务[rootnginx ~]# yum install -y nginx nfs-utils[rootphp ~]# yum install -y nfs-utils php-mysqlnd php php-fpm[rootmysql ~]# yum install -y mysql-server二、挂载php端[rootphp ~]# vim /etc/exports [rootphp…

常见代码八股

1. 利用梯度下降法&#xff0c;计算二次函数yx^2x4的最小值 def target_function(x):return x ** 2 x 4def gradient(x):return 2*x 1x_init 10 x x_init steps 100 lr 0.1 for i in range(100):x x - lr*gradient(x)print(f"最小值 f(x) {target_function(x):.4f…

【深入底层】C++开发简历4+4技能描述6

简历书写 熟悉C的封装、继承、多态&#xff0c;STL常用容器&#xff0c;熟悉C11的Lambda表达式、智能指针等&#xff0c;熟悉C20协程语法&#xff0c;具有良好的编码习惯与文档能力。 回答思路 这里是基本上就是要全会&#xff0c;考察的问题也很固定&#xff0c;stl这块可以定…

forest远程调用注意事项

1、如果在项目中&#xff0c;同时依赖了其中多个框架&#xff0c;那么按 Fastjson2 > Fastjson > Jackson > Gson 这样的优先级来判断&#xff0c;Forest 会以优先级最高的框架作为 JSON 转换器。2、Forest 支持哪几种 JSON 框架&#xff1f;A: 支持 Jackson、Gson、F…