数据结构中的二叉树与二分查找
1. 二叉树基础
二叉树是一种重要的数据结构,其节点包含值,并且每个节点最多有两个子节点,分别称为左子节点和右子节点。可以使用链表来表示二叉树,如下所示:
f
h
m
w
r
a
6
FRXQW
URRW
OHIW
ULJKW
YDOXH
由于树本质上是递归结构,许多二叉树类的操作可以使用递归方式实现。例如,实现 size() 操作时,二叉树类可以对根节点调用内部的 size(r : BinaryTreeNode) 操作。该操作的逻辑如下:
- 如果参数为 nil ,则返回 0。
- 否则,返回 1 加上对其左子树和右子树递归调用的结果之和。
除了 size() 操作,许多其他操作,特别是对每个节点的数据应用函数的内部迭代器操作,也可以很容易地使用递归实现。
然而,实现外部迭代器更具挑战性。因为外部迭代器不能使用递归实现,它需要在访问每个新节点时停止,并将该节点的值传递给客户端。解决这个问题有两种方法:
- 编写一个递归操作,将节点值按正确顺序复制到队列中,然后根据客户端的请求从数据结构中逐个提取项。
- 不使用递归实现迭代器,而是使用栈。
第二种方法虽然实现起来更难,但明显更好,因为它使用的空间要少得多。
二叉树抽象数据类型(ADT)描述了构建和检查二叉树的基本操作,其节点持有类型为 T 的值。二叉树类有一些不在 ADT 中的操
超级会员免费看
订阅专栏 解锁全文
1214

被折叠的 条评论
为什么被折叠?



