数据结构与算法Python版 树与二叉树的实现


一、树

  • 树是一种基本的“非线性”数据结构
  • 数据结构树分为:根、枝和叶等三个部分
  • 树在计算机科学的各个领域中被广泛应用:文件系统、图形学、数据库系统、计算机网络

树的特性

  • 树是一种分层结构,越接近顶部的层越普遍,越接近底部的层越独特
  • 一个节点的子节点与另一个节点的子节点相互之间是隔离、独立的
  • 每一个叶节点都具有唯一性。可以用从根开始到达每个节点的完全路径来唯一标识

树的应用- 文件系统
在这里插入图片描述

树的应用-域名体系
在这里插入图片描述

树的相关术语

  • 节点Node:组成树的基本部分。每个节点具有名称或值,节点还可以保存额外数据项
  • 边Edge:边是组成树的另一个基本部分。每条边恰好连接两个节点,表示节点之间具有关联。边具有出入方向;每个节点(除根节点)恰有一条来自另一节点的入边;每个节点可以有多条连到其它节点的出边
  • 根Root:树中唯一一个没有入边的节点
  • 路径Path:由边依次连接在一起的节点的有序列表
  • 子节点Children:入边均来自于同一个节点的若干节点,称为这个节点的子节点
  • 父节点Parent:一个节点是其所有出边所连接节点的父节点
  • 兄弟节点Sibling:具有同一个父节点的节点之间称为兄弟节点
  • 子树Subtree:一个节点和其所有子孙节点,以及相关边的集合
  • 叶节点Leaf:没有子节点的节点称为叶节点
  • 层级Level:从根节点开始到达一个节点的路径,所包含的边的数量,称为这个节点的层级。例如:下图D的层级为2,根节点的层级为0
  • 高度:树中所有节点的最大层级称为树的高度。例如:下图树的高度为2
    在这里插入图片描述

树的定义

  • 树由若干节点,以及两两连接节点的边组成,并有如下性质
    • 其中一个节点被设定为根;
    • 每个节点n(除根节点),都恰连接一条来自节点p的边,p是n的父节点;
    • 每个节点从根开始的路径是唯一的

树的定义-递归法

  • 树是:
    • 空集
    • 或者由根节点以及0个或多个子树构成(子树也是树),每个子树的根到根节点由边相连。
      在这里插入图片描述

二、二叉树的实现-嵌套列表法

如果每个节点最多有两个子节点,这样的树称为二叉树

二叉树的实现-嵌套列表法

  • 递归的嵌套列表实现二叉树的数据结构,列表具有3个元素[root,left,right]
    • 第1个元素为根节点的值
    • 第2个元素是左子树(所以也是一个列表);
    • 第3个元素是右子树(所以也是一个列表)。
  • 嵌套列表法的优点
    • 子树的结构与树相同,是一种递归数据结构
    • 很容易扩展到多叉树,仅需要增加列表元素即可
#用Python List来实现下图二叉树的数据结构
my_tree = ["a", 
           ["b", 
            ["d", [], []], 
            ["e", [], []]], 
           ["c", 
            ["f", [], []], 
            []]]

在这里插入图片描述

用Python嵌套列表法实现二叉树

方法名 描述
BinaryTree 创建仅有根节点的二叉树
insertLeft 将新节点插入树中作为其直接的左子节点
insertRight 将新节点插入树中作为其直接的右子节点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值