小白学习——数据结构与算法基础(基于python)——树

主要记录:树和树的算法
内容来源:书籍、网络和个人总结

1. 理论

1.1 树的由来

1.2 树的三个属性

  1. 层次性,即树是按层级构建的,越笼统就越靠近顶部,越具体则越靠近底部。
  2. 一个节点的所有子节点与另一个节点的所有子节点无关。
  3. 叶子节点都是独一无二的。

1.3 术语

节点
节点是树的基础部分。它可以有自己的名字,我们称作“键”。节点也可以带有附加信息, 我们称作“有效载荷”。


边是树的另一个基础部分。两个节点通过一条边相连,表示它们之间存在关系。

路径
路径是由边连接的有序节点列表。

层数
节点 n 的层数是从根节点到 n 的唯一路径长度。(根节点的层数是0。)

高度
树的高度是其中节点层数的最大值。

其它:略

1.4 定义

版本一(节点和边)

树由节点及连接节点的边构成。树有以下属性:

  1. 有一个根节点;
  2. 除根节点外,其他每个节点都与其唯一的父节点相连;
  3. 从根节点到其他每个节点都有且仅有一条路径;
  4. 如果每个节点最多有两个子节点,我们就称这样的树为二叉树。

定义一示意图:
在这里插入图片描述(由节点和边构成的树)

版本二(涉及递归)

一棵树要么为空,要么由一个根节点和零棵或多棵子树构成,子树本身也是一棵树。 每棵子树的根节点通过一条边连到父树的根节点。

定义二示意图:
在这里插入图片描述(由递归定义的树)

2. 实现

实现树的关键在于选择一个好的内部存储技巧。Python 提供两种有意思的方式,第一种称作“列表之列表”,第二种称作“节点与引用”。

2.1 用列表实现树——“列表之列表”

在“列表之列表”的树 中,我们将根节点的值作为列表的第一个元素;第二个元素是代表左子树的列表;第三个元素是 代表右子树的列表。

图示

在这里插入图片描述

代码示例

myTree = ['a',   #root
      ['b',  #left subtree
       ['d', [], []],
       ['e', [], []] ],
      ['c',  #right subtree
       ['f', [], []],
       [] ]
     ]

优点

“列表之列表”表示法的优点:

  1. 子树的结构与树相同,是一种递归数据结构
  2. 很容易扩展到多叉树,仅需要增加列表元素即可(不局限于二叉树)

python 代码实现

通过定义一系列函数来辅助操作嵌套列表:

  1. BinaryTree创建仅有根节点的二叉树
  2. insertLeft/insertRight将新节点插入树中作
    为其直接的左/右子节点
  3. get/setRootVal则取得或返回根节点
  4. getLeft/RightChild返回左/右子树
def BinaryTree(r):          # 创建一个树
    return [r, [], []]


# 插入操作是直接插入到根节点下面的左右子树,若已经存在,则替而代之并将其变为自己的子树
def insertLeft(root, newBranch):          
    t = root.pop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值