算法学习 - 树的一些解释

本文深入讲解树这一经典数据结构的概念、实现方式及遍历方法,并介绍了树的不同类型,包括普通树、二叉树等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

树的解释

是ADT里面很经典的数据结构了,应用太多了,相对于链表的线性访问时间,O(n)。树的大部分操作的平均运行时间都是为O(logN)。
- 树的概念
树有几种方式定义,一种是递归,若树不为空,则一棵树是由(root)的节点r和0个或者多个非空树组成。N个节点的树,有N-1个边。没有儿子的节点称为叶子(leaf). 对于任意节点N(i),它的深度为从根节点到N(i)的唯一路径长度。如果存在N(1)到N(2)的路径,那么N(1)是N(2)的祖先。如果N(1)不等于N(2),那么就称为真祖先。N(2)为真后裔

树的实现

树的代码实现有多种代码。首先是第一儿子/下一兄弟表示方法。

typedef struct TreeNode * PtrToNode;
struct TreeNode
{
ElementType element;
PtrToNode firstChild;
PtrToNode nextBrother;
};

以上就是他的实现方法了。其实这种表示是一个节点存放了它的第一个孩子,还有它下一个兄弟,这样下一层的节点和本层的节点都能够访问了。

树的遍历

树的遍历有三种:

  • 先序遍历
  • 中序遍历
  • 后序遍历

先序遍历是从头结点依次向下遍历,自上至下,自左之右。
中序遍历是先遍历左节点,然后父节点,然后右节点,再向上遍历。
后序遍历是先遍历左右子节点,然后向上遍历。


上面这二叉树。

先序遍历:1 2 3 4 5 6 7

中序遍历: 4 2 6 7 5 1 3

后序遍历: 4 6 7 5 2 3 1

树的一些分类

  • 普通树
  • 二叉树
  • 二叉查找树
  • 平衡二叉树
  • 伸展树
  • B-树
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值