python用列表定义二叉树_python 数据结构四 之 二叉树和树

python数据结构教程第四课

树形结构是复杂结构中最简单的一类,这是一类非常重要的结构,在实际中使用广泛,反映了许多计算过程的抽象结构

一、简介

1.树

2.二叉树

二、二叉树和树的抽象数据类型(ADT)

三、二叉树的python实现

1.二叉树的list实现

2.二叉树的遍历操作

3.二叉树的链表实现

四、二叉树的应用——Huffman Tree

五、树的python实现

一、简介

二叉树是树的子集,具有树的全部特性,这里先介绍树的定义与基本特性

1.树

定义:一棵树是n(n>=0)个结点的有限集T,当T非空时满足:

1)T中有且仅有一个特殊结点r称为树T的根

2)除根结点外的其余结点分为m(m>=0)个互不相交的非空有限子集,每个集合为一棵非空树,称为r的子树

结点个数为0的树称为空树

树的特性:

1)如果树的结构不空,其中就存在着唯一的起始结点,称为树根

2)按结构的连接关系,树根外的其余结点都有且只有一个前驱,但另一方面,一个结点可以有0个或者多个后继。在非空的树结构中一定有一些结点并不连接到其他结点,与尾结点相似

3)从树根结点出发,经过若干次后继关系可以到达结构中的任意一点

4)结点之间的联系不会形成循环关系

5)从这个结构里的任意两个不同结点出发,通过后继关系可达的两个结点集合,或者互不相交,或者一个是另一个的子集

2.二叉树

定义:二叉树是结点的有穷集合。这个集合或者是空集,或者其中有一个称为根结点的特殊结点,其余结点分属两棵不相交的二叉树,这两棵二叉树分别是原二叉树的左子树和右子树

关于二叉树的一些基本概念:

1)一棵二叉树的根结点称为该树的子树根结点的父结点;与此对应,子树的根结点称为二叉树树根结点的子结点

2)从父结点到子结点有一条连线,称为从父结点到子结点的边,父结点的两个结点互为兄弟结点

3)在二叉树里有些结点的两棵子树都空,没有子结点,这种结点称为树叶,树中其余结点称为分支结点

4)一个结点的子结点个数称为该结点的度数。显然,二叉树中树叶结点的度数为0,分支结点的度数可以是1或2

二、二叉树和树的抽象数据类型(ADT)

二叉树的基本操作包括创建空树,设置左右子树等,其基本ADT如下:

ADT BTree:

BTree(self, data, left,right) #构造空树

is_empty(self) #空树判断

num_nodes(self) #返回结点树

data(self) #返回树根数据

left(self) #返回左子树

right(self) #返回右子树

set_left(self) #设置左子树

set_right() #设置右子树

traversal(self) #迭代器

forall(self,op) #op的遍历操作

树的抽象数据类型与二叉树类似,不过在具体实现时,实现策略会有所不同,这里先给出ADT:

ADT Tree:

Tree(self, data,forest) #树的初始化

is_empty(self) #空树判断

num_nodes(self) #返回结点数据

data(self) #返回树根中的数据

first_child(self,node) #取得node的第一棵子树

children(self,node) #结点node子树的迭代器

set_first(self,tree) #用tree取代第一棵子树

insert_chil

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值