(c#)数据结构与算法分析 --树
树
首先,在win下,进入命令行,输入tree,它会以树的形式返回当前文件夹下的所有子文件夹及文件。
如上图,就是一个树。
就像一棵被颠倒过来的苹果树,每一个元素称之为节点,如图,A就是这棵树的老大了,称为根(root),如果某个节点有元素的话,这个节点相对于它的子节点为根,这棵树相对于A来说,是它的子树,例如,树D是A的子树。
对于没有子节点的节点,称之为叶节点。
这些树的根都被来自跟的每一条有向的边所连接。例如树E被来自根A的有向边TAE所连接。树J被来自根E的有向边TEJ所连接。
那么从一个节点到另外一个节点的所有节点序列称为路径,路径上边的条数就是这条路径的长了。可以看出,路径的长为所经过节点的个数减一。例如,路径EQ,它的长就是2。
深度就是根节点与这个节点的路径的长,比如,节点P和Q的深度就是3,节点K的深度就是2。
树的表示
可以用链表来表示一棵树。如图:
如图,A是链表的第一个元素,G是最后的一个元素,如果元素有子节点,那么这个元素就是这棵树的链表。
如箭头所指,ABCDEFG是一个链表,而节点DEFG是有子节点的树,所以DEFG元素存储的是另一个链表,比如E存储的是EIJ链表,以此类推,J存储的是JPQ链表,所以,一棵数不管有多大多深,都可以用一个链表表示,只不过这个链表包含了其他链表。

如上图,就是一个树。
就像一棵被颠倒过来的苹果树,每一个元素称之为节点,如图,A就是这棵树的老大了,称为根(root),如果某个节点有元素的话,这个节点相对于它的子节点为根,这棵树相对于A来说,是它的子树,例如,树D是A的子树。
对于没有子节点的节点,称之为叶节点。
这些树的根都被来自跟的每一条有向的边所连接。例如树E被来自根A的有向边TAE所连接。树J被来自根E的有向边TEJ所连接。
那么从一个节点到另外一个节点的所有节点序列称为路径,路径上边的条数就是这条路径的长了。可以看出,路径的长为所经过节点的个数减一。例如,路径EQ,它的长就是2。
深度就是根节点与这个节点的路径的长,比如,节点P和Q的深度就是3,节点K的深度就是2。
树的表示
可以用链表来表示一棵树。如图:

如图,A是链表的第一个元素,G是最后的一个元素,如果元素有子节点,那么这个元素就是这棵树的链表。
如箭头所指,ABCDEFG是一个链表,而节点DEFG是有子节点的树,所以DEFG元素存储的是另一个链表,比如E存储的是EIJ链表,以此类推,J存储的是JPQ链表,所以,一棵数不管有多大多深,都可以用一个链表表示,只不过这个链表包含了其他链表。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述