目录
- 树的相关术语
- 二叉树和二叉搜索树
- 二叉树的遍历
- 二叉搜索树的搜索
- 二叉搜索树的移除
「 树的相关术语 」
一个树结构包含一些列存在父子关系的节点。每个节点都有一个父节点(除了顶部的第一个节点)以及零个或多个节点
位于树顶部的节点叫作根节点(11)。它没有父节点。树中的每个元素都叫做节点,节点分为内部节点和外部节点。至少有一个子节点的节点称为内部节点,没有子节点的节点称为外部节点或叶子节点
一个节点可以有祖先和后代。一个节点(除了根节点)的祖先包括父节点、祖父节点、曾祖父节点等。一个节点的后代包括子节点,孙子节点,曾孙子节点等。
节点的一个属性是深度,节点的深度取决于它的祖先节点的数量。比如,节点3有3个祖先节点(5,7,11),它的深度为3
树的高度取决于所有节点深度的最大值。一棵树也可以被分解成层级。根节点在第0层,它的子节点在第1层,以此类推。上图的树的高度为3
「 二叉树和二叉搜索树 」
二叉树指树中的每个节点最多只能有两个子节点:一个左节点,另一个右节点。这个定义有助于我们写出高效地在树中插入,查找和删除节点的算法。
二叉搜索树(BST)是二叉树的一种,但是只允许你在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。例如上面图中的树,就是一棵二叉搜索树
本章以二叉搜索树作为研究对象
假设二叉树类型定义如下
function
「 二叉搜索树的插入」
我们先为tree类定义一个插入函数
insert
要向二叉搜索树中插入一个新的节点(或键),要经历以下步骤:
第一步是验证插入操作是否是特殊操作。对于二叉搜索树的特殊情况是,我们尝试插入的树节点是否为第一个节点(行{1})。如果是,我们要做的就是创建一个Node类实例并赋值给root,将root指向这个新节点(行{2})。因为在Node构建函数的属性里,只需要向构造函数传递我们想用来插入的节点值