一、树
树
- 树是一种基本的“非线性”数据结构
- 数据结构树分为:根、枝和叶等三个部分
- 树在计算机科学的各个领域中被广泛应用:文件系统、图形学、数据库系统、计算机网络
树的特性
- 树是一种分层结构,越接近顶部的层越普遍,越接近底部的层越独特
- 一个节点的子节点与另一个节点的子节点相互之间是隔离、独立的
- 每一个叶节点都具有唯一性。可以用从根开始到达每个节点的完全路径来唯一标识
树的应用- 文件系统
树的应用-域名体系
树的相关术语
- 节点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 | 将新节点插入树中作为其直接的右子节点 |