python数据结构与算法分析第二版_Python数据结构与算法分析 day22

Python数据结构与算法分析 day2201

实现

根据前边给出的定义,可以使用下边的一些函数来创建和操作二叉树。

(1)BinaryTree()创建仅有根节点的二叉树;

(2)insertLeftChild()将新节点插入树中作为其直接的左子节点;

(3)insertRightChild()将新节点插入树中作为其直接的右子节点;

(4)setRootVal(val)在当前节点中存储参数val中的对象;

(5)getRootVal()返回当前节点中存储的对象;

(6)insertLeft(val)新建一颗二叉树,并将其作为当前节点的左子节点;

(7)insertRight(val)新建一颗二叉树,并将其作为当前节点的左子节点。

实现树的关键在于选择一个好的内部存储技巧。Python提供了两种有意思的方式,我们在选择前会仔细了解这两种方式,第一种为“列表之列表”,第二种为“节点与引用”。

0 2

列表之列表

用列表之列表表示数时,先从Python的列表数据结构开始,编写前边定义的函数。尽管为列表编写一套操作的接口与已经实现的其他抽象数据类型有些不同,但做起来还是很有意思的,因为这给我们提供了一个简单的数据类型。树由具有3个元素的列表实现:第1个元素是根节点的值;第2个元素是代表左子树的列表;第3个元素是代表右子树的列表。下图展示了一棵简单的树及其对应的列表实现,右侧是一颗简单的树,左侧是对应列表的实现。

dd9ce1c186037c67a892d5a585ff1b47.png

注意,可以通过标准的列表切片操作访问子树。树的根是myTree[0],左子树是myTree[1],右子树是myTree[2]。下面展示了如何使用列表创建树,一旦创建完成就可以访问它的根节点、左子树和右子树。

68655a511eb746054abe7cb1615c6823.png

列表之列表的优点在于子树的结构与树相同,是一种递归数据结构,很容易扩展到多叉树,仅需要增加列表元素就可以了。

接着提供一些便于将列表作为数使用的函数,以正式定义树的数据结构,我们不是要定义二叉树类,而是创建可用于标准列表的函数。

列表函数BinaryTree:

2703a34c472335e93eb7eaa95e99883d.png

插入左子树:

91210229b5918156b2d55ca2c18d953f.png

插入右子树:

970ad949cff7a8638e9b98a9834750d5.png

树的访问函数:

da600edb6cb33886b6b29e2be465070e.png

举例:

0826442bbdeecd8ed84a72d63932ec0d.png

0 3

节点与引用

树的第二种表示法是利用节点与应用。我们将定义一个类,其中有根节点和左右子树的属性。每个节点保存根节点的数据项,以及指向左右子树的链接。

8cb245ad392bceca0786b66481399a80.png

定义一个BinaryTree类,成员key保存根节点数据项,成员1eft/rightChild则保存指向左/右子树的引用(同样是BinaryTree对象)。

BinaryTree类:

1f98116ac1e2d9be98e924adf706c487.png

插入左子节点:

ddfae8f072d83bcd47ab0e15dddbc776.png

插入右子节点:

bf55891c3579491842c7172c48910003.png

二叉树的访问函数:

19d5b35eced90842205e6ccdb5bbed61.png

举例:

97051de91463507c1fe87eb3bc98006e.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值