❖树在计算机科学的各个领域中被广泛应用操作系统、图形学、数据库系统、计算机网络
❖跟自然界中的树一样,数据结构树也分为:

根、枝和叶等三个部分
一般数据结构的图示把根放在上方,叶放在下方

❖节点Node:组成树的基本部分每个节点具有名称,或“键值”,节点还可以保存额外数据项,数据项根据不同的应用而变
❖边Edge:边是组成树的另一个基本部分每条边恰好连接两个节点,表示节点之间具有关联,边具有出入方向;每个节点(除根节点)恰有一条来自另一节点的入边;每个节点可以有多条连到其它节点的出边

❖根Root:树中唯一一个没有入边的节点
❖路径Path:由边依次连接在一起的节点的有序列表

❖子节点Children:入边均来自于同一个节点的若干节点,称为这个节点的子节点
❖父节点Parent:一个节点是其所有出边所连接节点的父节点

❖兄弟节点Sibling:具有同一个父节点的节点之间称为兄弟节点
❖子树Subtree:一个节点和其所有子孙节点,以及相关边的集合

❖ 叶节点Leaf:没有子节点的节点称为叶节点
❖ 层级Level:从根节点开始到达一个节点的路径所包含的边的数量,称为这个节点的层级。如D的层级为2,根节点的层级为0
❖ 高度:树中所有节点的最大层级称为树的高度

树的定义

❖树由若干节点,以及两两连接节点的边组成,并有如下性质

其中一个节点被设定为根;
每个节点n(除根节点),都恰连接一条来自节点p的边,p是n的父节点;
每个节点从根开始的路径是唯一的如果每个节点最多有两个子节点,这样的树称为“二叉树”

嵌套列表法实现树

❖首先我们尝试用Python List来实现二叉树树数据结构;
❖递归的嵌套列表实现二叉树,由具有3个元素的列表实现:
第1个元素为根节点的值;
第2个元素是左子树(所以也是一个列表);
第3个元素是右子树(所以也是一个列表)

[root,left,right]

❖以右图的示例,一个6节点的二叉树
根是myTree[0],左子树myTree[1],右子树myTree[2]
❖嵌套列表法的优点
子树的结构与树相同,是一种递归数据结构,很容易扩展到多叉树,仅需要增加列表元素即可


BinaryTree创建仅有根节点的二叉树
insertLeft/insertRight将新节点插入树中作为其直接的左/右子节点
get/setRootVal则取得或返回根节点
getLeft/RightChild返回左/右子树

def BinaryTree(r):return [r,[],[]]
def insertLeft(root,newBranch):t= root.pop(1)if len(t)>1:root.insert(1,[newBranch,t,[]])else:root.insert(1,[newBranch,[],[]])return root
def insertRight(root,newBranch):t= root.pop(2)if len(t)>1:root.insert(2,[newBranch,[],t])else:root.insert(2,[newBranch,[],[]])return root
def getRootVal(root):return root[0]
def setRootVal(root,newVal):root[0]=newVal
def getLeftChild(root):return root[1]
def getRightChild(root):return root[2]

实现树:节点链接法

❖同样可以用节点链接法来实现树
每个节点保存根节点的数据项,以及指向左右子树的链接
❖定义一个BinaryTree类
成员key保存根节点数据项成员left/rightChild则保存指向左/右子树的引用(同样是BinaryTree对象)

class BinaryTree:def __init__(self, rootObj):self.key = rootObjself.leftChild = Noneself.rightChild = Nonedef insertLeft(self, newNode):if self.leftChild is None:self.leftChild = BinaryTree(newNode)else:t = BinaryTree(newNode)t.leftChild = self.leftChildself.leftChild = tdef insertRight(self, newNode):if self.rightChild is None:self.rightChild = BinaryTree(newNode)else:t = BinaryTree(newNode)t.rightChild = self.rightChildself.rightChild = tdef getRightChild(self):return self.rightChilddef getLeftChild(self):return self.leftChilddef setRootVal(self, obj):self.key = objdef getRootVal(self):return self.key

树形结构(Python)相关推荐

  1. python制作好看的界面_【一点资讯】Python界面如何漂亮的展示树形结构,PyQt5控件之QTreeWidget详解 www.yidianzixun.com...

    前面内容,我们介绍了关于PyQt5的一些常用高级控件的使用,为了更好的便于大家理解,我们通过一些案例进行了讲解.用户接口 用Python将电子表格Excel展示在界面中,PyQt5之QTableWid ...

  2. python list转换成树形结构_python递归查询菜单并转换成json实例

    最近需要用python写一个菜单,折腾了两三天才搞定,现在记录在此,需要的朋友可以借鉴一下. 备注:文章引用非可执行完整代码,仅仅摘录了关键部分的代码 环境 数据库:mysql python:3.6 ...

  3. Python数据结构之树形结构——数组存储

    Python数据结构之树形结构--数组存储 树:一种非线性结构,主要使用链表来存储,也可以使用数组存储. 本代码使用两种数组 元素数组:0,6,3,5,4,7,8,9,2 由于 0 索引不存储元素,所 ...

  4. python画父子关系图_将有父子关系的一维数组转换成树形结构(多维)数据

    先来个函数注释 : /** * 将有父子关系的一维数组转换成树形结构(多维)数据 * console.log(JSON.stringify(setTreeData(data), null, 2)); ...

  5. python list转换成树形结构_列表数据(包含父节点关系)转化为树形结构

    今天开发遇到一个需求,就是把包含父子关系的数据转化为树形结构,这个需求来自我开发的一个功能,前端需要使用 Element 的级联选择器实现行业级联选择的功能. 列表数据类型 每条数据都列出了其父 id ...

  6. Vue 递归实现树形结构

    2019独角兽企业重金招聘Python工程师标准>>> 结果展示 先给出两张效果图,左侧是百度Echarts的文档中心截图,右侧是我个人结合项目中文档中心截图 项目中假设为后台管理系 ...

  7. 数据库学习,树形结构的数据库表Schema设计方案

    2019独角兽企业重金招聘Python工程师标准>>> 程序设计过程中,我们常常用树形结构来表征某些数据的关联关系,如企业上下级部门.栏目结构.商品分类等等,通常而言,这些树状结构需 ...

  8. PyQt5树形结构控件QTreeWidget操作

    QTreeWidget 类根据预设的模型提供树形显示控件. QTreeWidget 使用类似于 QListView 类的方式提供一种典型的基于 item 的树形交互方法类,该类基于QT的"模 ...

  9. 树形结构递归_递归和匿名函数

    戳上面的蓝字关注我,有干货哦! ❝ 编程语言中,函数Func(Type a,--)直接或间接调用函数本身,则该函数称为递归函数. ❞ 模拟实现树形结构的遍历 比如:我要遍历下图sublime_pyth ...

  10. 树形结构在关系数据库中的设计

    在程序设计中,经常以树形结构表示数据的层次关系,如菜单的结构.商品的分类等. 这样的层次结构在关系数据库中难以直观地表示.常见的一种做法是用一个字段指向上级节点来表示记录的上下级关系. fid pid ...

最新文章

  1. 第二弹,坐地铁就能学会的3种「非常有趣」的 Python 玩法
  2. syscall 系统调用陷入_trusty系统调用
  3. 程序员送女朋友的礼物:域名和祝福视频
  4. 【Android教程】Android用户系统管理
  5. Java面试11|Maven与Git
  6. 电商系统设计之商品 (下)
  7. 在Word中如何进行半行输入
  8. laravel validate
  9. Hyper-V 测试
  10. S102公路第I标段施工图设计--河北工程大学土木工程学院
  11. 小米手机通用面具安装,root获取
  12. oracle 定时备份数据库脚本
  13. 集赞生成器:朋友圈集赞不求人
  14. GIS公司分布图GIS院校分布图
  15. 如何让单片机I/O口上电复位时为低电平
  16. VMware Ubuntu虚拟机锁定文件失败,打不开磁盘
  17. 申城最浪漫的法国普卢旺司餐厅--Bistro Latitude
  18. 第七章 为什么巴比伦塔会失败
  19. 微信公众号js接口安全域名的MP_verify_*.txt文件的放置路径
  20. 【翠花学Maven】Maven详解

热门文章

  1. 【字符集】字符集和编码知识【转】
  2. 一个简单答题系统的设计与实现(四)
  3. Cookie&Session
  4. 大专(高职)到底值不值得读
  5. 自定义蜘蛛网图 NetView
  6. 如果恢复计算机系统时间吗,经常重置、恢复系统对电脑的影响大不大?
  7. SpringBoot集成Quartz动态定时任务
  8. 7-1 图书价格汇总 (20 分)
  9. 如何妥善备份你的以太坊钱包
  10. 初识以太坊 ——钱包、测试网络和简单交易