python中树的介绍

1.基本概念

在数据的组织中,树结构的确是一个突破,因为用它实现的一系列算法比使用线性数据结构(如基于数组的列表或链表)要快得多。树也为数据提供了一个更加真实、自然的组织形式,并由此在文件系统、图形用户界面、数据库、网站和其他计算机系统中广泛应用。

2.树的定义和属性

树是一种将元素分层次存储抽象数据类型。除了最顶部的元素,每个元素在书中都有一个双亲节点和多个或者零个的孩子节点。通常称最顶部的元素为树根(root), 在图中它被作为最顶部的元素,因为其他元素都被连接在它的下面(这与真实世界中的书正好相反)
如上面这棵树所示,节点A是这棵树的根节点,B、E、K是A的孩子节点,A是它们的父节点。B是C、D的父节点,C、D是它的子节点。同时,B、E、K互为兄弟节点。其中,K为外部节点(也称叶子节点)。B、E为内部节点。

属性

通常我们将树T定义为存储为一系列元素的有限节点集合,这些节点都具有 parent-children 关系并且满足如下属性:

  • 如果树T不为空,则它一定具有一个称为根节点的特殊节点,并且该节点没有父节点。
  • 每个非根节点v都具有唯一的父节点w,每个具有父节点w的节点都是节点w的一个孩子。

注意,上面定义,一棵树可能为空,这意味着它不含有任何节点。这个约定也允许我们递归地定义一棵树,以使这棵树要么为空,要么包含一个节点r,其他一系列子树的根节点是r的孩子节点。

和其他节点关系

同一个父亲节点的孩子节点之间是兄弟关系。一个没有孩子的节点称为外部节点。有一个孩子或者多个孩子的节点称为内部节点。外部节点也称为叶子节点。

树的边和路径

树T的一条边指的是一对节点(u,v),这里u是v的父节点或者v是u的父节点。树T当中的路径指的是一系列的节点,这些节点中任意两个连续的节点之间都是一条边。

有序树

如果树中每个节点的孩子节点都有特定的顺序,则称该树为有序树,我们将一个节点的孩子节点依次编号为第一个、第二个、第三个等。通常我们按照从左到右的顺序对兄弟节点进行排序。

树的抽象数据类型

我们用位置作为节点的抽象结构来定义树的抽象数据结构。一个元素存储在一个位置,并且位置信息满足树中的父节点与孩子节点的关系。一棵树的位置对象支持如下方法:

  • p.element() :返回存储在位置p的元素。
  • T.root():返回树T的根节点的位置。
  • T.is_root( p):如果位置p是树T的根节点,返回True。
  • T.parent( p ):返回位置为p的父节点的位置。如果p的位置为树的根节点,返回None。
  • T.num_children( p ):返回位置为p的孩子节点的编号。
  • T.children( p ):产生位置为p的孩子节点的一个迭代。
  • T.isleaf( p ) :判断位置p是否是叶子节点
  • len(T):返回树T所包含的元素数量。
  • T.position():迭代地生成树T的所有位置。

深度与高度

深度:
假定p是树T的一个节点,那么p的深度就是节点p的祖先的个数,不包括p本身。

  • 如果p是根节点,p的深度为0。
  • 否则,p的深度就是其父节点的深度加1.

高度:
如果p是一个叶子节点,那么它的高度为0。否则,p的高度是它孩子节点中的最大高度加1.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值