树:多个有层次的节点的集合

特点:

  1. 每个节点有零个或多个子节点
  2. 没有父节点的节点称为根节点
  3. 每一个非根节点有且只有一个父节点
  4. 除了根节点外,每个子节点可以分为多个不相交的子树

术语:

  1. 节点的度:一个节点含有的子树的个数称为该节点的度
  2. 树的度:一棵树中,最大的节点的度称为树的度
  3. 叶节点终端节点:度为零的节点
  4. 父亲节点父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点
  5. 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点
  6. 兄弟节点:具有相同父节点的节点互称为兄弟节点
  7. 层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推
  8. 高度深度:树中节点的最大层次
  9. 堂兄弟节点:父节点在同一层的节点互为堂兄弟
  10. 节点的祖先:从根到该节点所经分支上的所有节点
  11. 子孙:以某节点为根的子树中任一节点都称为该节点的子孙
  12. 森林:由m(m>=0)棵互不相交的树的集合称为森林

种类:

  1. 无序树:树中任意节点的子节点之间没有顺序关系
  2. 有序树:树中任意节点的子节点之间有顺序关系
    • 二叉树:每个节点最多含有两个子树的树称为二叉树

      • 完全二叉树:对于一颗二叉树,假设其深度为d。除了第d层外,其它各层的节点数目均已达最大值,且第d层所有节点从左向右连续地紧密排列
      • 平衡二叉树:当且仅当任何节点的两棵子树的高度差不大于1的二叉树;
      • 排序二叉树,也称二叉搜索树、有序二叉树
    • 霍夫曼树:带权路径最短的二叉树称为哈夫曼树或最优二叉树
    • B树:一种对读写操作进行优化的自平衡的二叉查找树,能够保持数据有序,拥有多余两个子树

二叉树:

结构如图示:

树,由多个节点构成,节点 = 元素 + 左子节点 + 右子节点

树的创建和遍历:

遍历 = 广度遍历 + 深度遍历

广度遍历:从左往右挨个遍历

深度遍历  = 先序 + 中序 + 后序

先序:根 - 左 - 右

中序:左 - 根 - 右

后序:左 - 右 - 根

无论是哪种遍历方式,左一定在右前面

# coding:utf-8
# 创建二叉树class Node(object):'''定义节点'''def __init__(self, item):self.elem = itemself.lchild = Noneself.rchild = Noneclass Tree(object):'''创建二叉树'''def __init__(self):self.root = Nonedef add(self, item):node = Node(item)if self.root is None:self.root = nodereturnqueue = [self.root]while queue:cur_node = queue.pop(0)if cur_node.lchild is None:cur_node.lchild = nodereturnelse:queue.append(cur_node.lchild)if cur_node.rchild is None:cur_node.rchild = nodereturnelse:queue.append(cur_node.rchild)def breadth_travel(self):'''广度遍历'''if self.root is None:returnqueue = [self.root]while queue:cur_node = queue.pop(0)print(cur_node.elem, end=" ")if cur_node.lchild is not None:queue.append(cur_node.lchild)if cur_node.rchild is not None:queue.append(cur_node.rchild)def preorder(self, node):'''先序'''if node is None:returnprint(node.elem, end=" ")self.preorder(node.lchild)self.preorder(node.rchild)def inorder(self, node):'''中序'''if node is None:returnself.inorder(node.lchild)print(node.elem, end=" ")self.inorder(node.rchild)def postorder(self, node):'''后序'''if node is None:returnself.postorder(node.lchild)self.postorder(node.rchild)print(node.elem, end=" ")

python - 树相关推荐

  1. python树状节点 可拖拽_Python 的 heapq 模块源码分析

    原文链接:Python 的 heapq 模块源码分析 起步 heapq 模块实现了适用于Python列表的最小堆排序算法. 堆是一个树状的数据结构,其中的子节点都与父母排序顺序关系.因为堆排序中的树是 ...

  2. python树的实现_Python实现简单字典树的方法

    本文实例讲述了Python实现简单字典树的方法.分享给大家供大家参考,具体如下: #coding=utf8 """代码实现了最简单的字典树,只支持由小写字母组成的字符串. ...

  3. python树代码_浅析AST抽象语法树及Python代码实现

    在计算机科学中,抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,这里特指编程语言的源代码.树上的每个 ...

  4. python树状图可视化_如何可视化(树状图)一个层次项目字典?

    这是我第一次用Python从字典格式的分层数据中进行可视化.数据的最后一部分如下所示:d = {^2820: [^391, ^1024], ^2821: [^759, 'w', ^118, ^51], ...

  5. python 树状数组_【算法日积月累】19-高级数据结构:树状数组

    树状数组能解决的问题 树状数组,也称作"二叉索引树"(Binary Indexed Tree)或 Fenwick 树. 它可以高效地实现如下两个操作: 1.数组前缀和的查询: 2. ...

  6. python 树_Python树的概念

    1.定义 1)非线性结构,每个元素可以有多个前驱和后继. 2)树是n(n>=0)个元素的集合. n=0时,称为空树. 树只有一个特殊的没有前驱的元素,称为树的根root. 树中除了根节点外,其余 ...

  7. python 树状图可视化_Python可视化25|seaborn矩阵图

    矩阵图即用一张图绘制多个变量之间的关系,数据挖掘中常用于初期数据探索: 本文介绍python中seaborn.pairplot(傻瓜版)和seaborn.PairGrid(更个性化版)绘制矩阵图 本文 ...

  8. python 树状图代码_Python 无限级分类树状结构生成算法 「实用代码」

    def generate_tree(source, parent): tree = [] for item in source: if item["parent"] == pare ...

  9. Python 树的遍历

    文章目录 二叉树的遍历 前序遍历 递归 迭代 - 栈 中序遍历 递归 迭代 - 栈 莫里斯遍历 后序遍历 递归 迭代 - 栈 层序遍历 BFS-广度优先搜索 - 队列 层序遍历-BFS N叉树的遍历 ...

最新文章

  1. 【Android 应用开发】Activity 返回堆栈管理 ( 阶段总结 | 任务栈管理 | 返回堆栈 | 清除返回堆栈 | 亲和性 | 启动模式补充 | standard | singleTop )
  2. iOS笔记之UIKit_UINavigationController
  3. Linq to xml 示例分析
  4. AIoT 又迎一利器,涂鸦云开发平台来了!
  5. .bash_profile和.bashrc的什么差别
  6. 剖析 |数据现代化-富国银行的数据转型之路
  7. 解决windows 2003 无法安装vss2005的问题
  8. 按键精灵易语言c,易语言插件按键精灵调用方法
  9. 董树义 近代微波测量技术_论文发表 | 基于微波雷达的1200米大跨悬索桥多点变形同步测量...
  10. zemax中如何和matlab中通信,如何在ZEMAX及MATLAB之间通信.doc
  11. Centos 6.10 安装docker
  12. java计算机毕业设计Web网上购书后台管理系统MyBatis+系统+LW文档+源码+调试部署
  13. 2015校园O2O商业模式解析——从物流切入
  14. 使用Kaiju无组装计算宏基因组数据物种注释相对丰度
  15. 计算机分区容量计算公式,100g等于多少mb?电脑分区100g是多少mb?电脑100g内存等于多少mb?...
  16. 毕业生做了这个考研论坛系统,使用的是SSM框架和JSP技术
  17. python安装教程(搬运工)
  18. MacBook安装Windows Server(非虚拟机)
  19. 模糊数学(Fuzzy mathematics)及其应用
  20. vscode中搭建Golang开发环境(图文并茂)

热门文章

  1. 斗地主改良版及音乐管理系统
  2. vscode react插件
  3. pyqt5 多线程遇到的问题总结
  4. 【xilinx xfopencv】Vivado_HLS_ov5640_rgb2gray_hdmi 第二部分
  5. 触控的手牌—Cocos Creator
  6. Appium元素定位和案例(有注释)
  7. 向量连接世界,Zilliz 《2022 非结构化数据峰会》来袭
  8. Mendix架构体系概述(三)- 完结篇
  9. Go Singly 链表
  10. 操作系统开发--GDT(全局描述符表)详解