python之树的实现

一、前言

树的术语是生物学、家谱学和几何学术语的一个特殊混合体。它很好的表示了层级结构,它的两个主要特征:

  • 每个项都有多个子节点。
  • 除了叫做根(树最顶端的节点)的特殊项,所有其他的项都只有一个父节点。

普通的树和二叉树的递归定义:

  • 普通的树------普通的树要么为空,要么包含一个有限的节点的集合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

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值