一、前言
树的术语是生物学、家谱学和几何学术语的一个特殊混合体。它很好的表示了层级结构,它的两个主要特征:
- 每个项都有多个子节点。
- 除了叫做根(树最顶端的节点)的特殊项,所有其他的项都只有一个父节点。
普通的树和二叉树的递归定义:
- 普通的树------普通的树要么为空,要么包含一个有限的节点的集合T。有一个和所有其他节点不同的节点r,称为根,此外,集合T-{r}被划分为不相连的子集,每个子集都是一个普通的树。
- 二叉树------一个二叉树要么为空,要么包含一个根节点,外加一个左子树和一个右子树,每个子树都是一个二叉树。
二、二叉搜索树(Binary Search Tree,BST)
在一个BST中,给定节点的左子树中的节点要小于它,其右子树中的节点要大于给定的节点。
2.1 二叉搜索树接口中的方法
BST方法 | 作用 |
tree.isEmpty() | 如果为空,返回True,否则返回False |
tree.__len__() | 返回树中元素的数目 |
tree.__iter__() | 对树进行一次前向遍历 |
tree.__str__() | 返回字符串,表示树的形状 |
tree.__contains__(item) | 如果item在树中,返回True,否则返回False |
tree.__add__(otherTree) | 返回一个新树,内容为tree和otherTree的内容 |
tree.__eq__(anyObject) | 若tree==otherTree,返回True,否则返回False |
tree.clear() | 让树变成空树 |
tree.add(item) | 将item添加到树中适当的位置 |
tree.remove(item) | 从树中删除item,先验条件:item在树中 |
tree.replace(item,newItem) | 使用newItem替代树中匹配的项,并返回匹配的项 |
tree.inorder() | 返回一个迭代器,对树执行中序遍历 |
tree.postorder() | 返回一个迭代器,对树执行后序遍历 |
tree.levelorder() | 返回一个迭代器,对树执行层序遍历 |
2.2代码实现
2.2.1 创建抽象集类,并保存为abstractcollection.py文件,具体代码见博客:https://blog.csdn.net/lzh_12345/article/details/79759960中的“二、利用链表实现栈”之2.1的代码。
2.2.2创建二叉搜索树节点类BSTNode,并保存为bstnode.py文件
class BSTNode(object):
"""Represents a node for a linked binary search tree."""
def __init__(self, data, left = None, right = None):
self.data = data
self.left = left
self.right = right
2.2.3创建LinkedStack和LinkedQueue类,并分别保存为linkedstack.py和linkedqueue.py文件。
LinkedStack类的具体代码:见博客:https://blog.csdn.net/lzh_12345/article/details/79759960中的“二、利用链表实现栈”。
LinkedQueue类的具体代码:见博客:ht