在计算机科学中,树是分层结构的抽象模型 。本篇学习笔记记录树的内容如下:

树的基本功能:定义、术语、ADT

树的遍历方法:前序、中序、后序

树的定义

第一种:树由一组节点和一组连接节点的边组成。树具有以下属性:

  • 树的一个节点被指定为根节点。
  • 除了根节点之外,每个节点 n 通过一个其他节点 p 的边连接,其中 p 是 n 的父节点。
  • 从根路径遍历到每个节点路径唯一。
  • 如果树中的每个节点最多有两个子节点,我们说该树是一个二叉树。

第二种:树是空的,或者由一个根节点和零个或多个子树组成,每个子树也是一棵树。每个子树的根节点通过边连接到父树的根节点。

下图说明了树的这种递归定义。使用树的递归定义,我们知道图中的树至少有四个节点,因为表示一个子树的每个三角形必须有一个根节点。

它可能有比这更多的节点,但我们不知道,除非我们更深入树。

树的术语

  • 根节点(Root):无父节点 (A)
  • 中间节点(Internal node):具有至少一个子节点的节点 (A, B, C, F)
  • 叶子(External node):无子节点 (E, I, J, K, G, H, D)
  • 祖先(Ancestors)::父母,祖父母,祖父母,等等
  • 后代(Descendant):孩子,孙子,重孙子,等等.
  • 深度(Depth of a node):树的祖先高度数:任意节点的最大深度. Depth(E) = 2
  • 高度(Height):Height = 3
  • 兄弟姐妹(Sibling):C是B和D的兄弟姐妹.
  • 子树(Subtree):树由节点及其后代组成
  • 边(Edge of tree):边是树的另一个基本部分。边连接两个节点以显示它们之间存在关系。每个节点(除根之外)都恰好从另一个节点的传入连接。每个节点可以具有多个输出边。
  • 通路(Path):路径是由边连接节点的有序列表。如I到G的Path: I->F->B->A->C->G

树的ADT

  • 二叉树可以通过存储一个节点的数据加两个子指针来实现.
  • 具有两个以上孩子的树可以使用链接的节点列表来实现

通用方法:

  • Int size()
  • boolean isEmpty()
  • Iterator elements()
  • Iterator positions()

查询方法:

  • boolean isInternal(p)
  • boolean isExternal(p)
  • boolean isRoot(p)

更新方法:

  • object replace (p, o)

访问器方法:

  • Node root()
  • Node parent(p)
  • List children(p)

树的遍历方法

有三种常用的模式来访问树中的所有节点。这些模式之间的差异是每个节点被访问的顺序。我们称这种访问节点方式为“遍历”。

  • 先序: 在前序遍历中,我们首先访问根节点,然后递归地做左侧子树的前序遍历,随后是右侧子树的递归前序遍历。
  • 中序(顺序遍历):在一个中序遍历中,我们递归地对左子树进行一次遍历,访问根节点,最后递归遍历右子树。
  • 后序:在后序遍历中,我们递归地对左子树和右子树进行后序遍历,然后访问根节点。

python数据结构之树(概述)的更多相关文章

  1. python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)

    python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...

  2. python数据结构之树(二分查找树)

    本篇学习笔记记录二叉查找树的定义以及用python实现数据结构增.删.查的操作. 二叉查找树(Binary Search Tree) 简称BST,又叫二叉排序树(Binary Sort Tree),是 ...

  3. python数据结构之树(二叉树的遍历)

    树是数据结构中非常重要的一种,主要的用途是用来提高查找效率,对于要重复查找的情况效果更佳,如二叉排序树.FP-树. 本篇学习笔记来自:二叉树及其七种遍历方式.python遍历与非遍历方式实现二叉树 介 ...

  4. Python数据结构之树

    二叉树 嵌套列表方式 # coding:utf-8 # 列表嵌套法 def BinaryTree(r): return [r, [], []] def insertLeft(root, newBran ...

  5. python数据结构树和二叉树简介

    一.树的定义 树形结构是一类重要的非线性结构.树形结构是结点之间有分支,并具有层次关系的结构.它非常类似于自然界中的树.树的递归定义:树(Tree)是n(n≥0)个结点的有限集T,T为空时称为空树,否 ...

  6. Python与数据结构[3] -> 树/Tree[2] -> AVL 平衡树和树旋转的 Python 实现

    AVL 平衡树和树旋转 目录 AVL平衡二叉树 树旋转 代码实现 1 AVL平衡二叉树 AVL(Adelson-Velskii & Landis)树是一种带有平衡条件的二叉树,一棵AVL树其实 ...

  7. python数据结构与算法

    最近忙着准备各种笔试的东西,主要看什么数据结构啊,算法啦,balahbalah啊,以前一直就没看过这些,就挑了本简单的<啊哈算法>入门,不过里面的数据结构和算法都是用C语言写的,而自己对p ...

  8. Python入门篇-面向对象概述

    Python入门篇-面向对象概述 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.语言的分类 面向机器 抽象成机器指令,机器容易理解 代表:汇编语言 面向过程 做一件事情,排出个 ...

  9. python数据结构之二叉树的统计与转换实例

    python数据结构之二叉树的统计与转换实例 这篇文章主要介绍了python数据结构之二叉树的统计与转换实例,例如统计二叉树的叶子.分支节点,以及二叉树的左右两树互换等,需要的朋友可以参考下 一.获取 ...

随机推荐

  1. 使用srvany.exe将程序安装成windows服务的详细教程

    srvany.exe介绍 srvany.exe是Microsoft Windows Resource Kits工具集的一个实用的小工具,用于将任何EXE程序作为Windows服务运行.也就是说srva ...

  2. redis资料

    http://snowolf.iteye.com/blog/1630697  征服redis配置 http://redis.readthedocs.org/en/latest/  redis命令参考 ...

  3. 编译Android 必须安装的库

    要安装的库: 正在卸载 build-essential ...正在卸载 g++-multilib ...正在卸载 g++ ...正在卸载 gcc-multilib ...正在卸载 gcc ...正在卸 ...

  4. [Windows] 解决 COM Surrogate 错误提示

    运行环境:Windows 8.1 (64bits) 异常描述:打开 "Windows 照片查看器",试图放大或缩小窗体,弹出 "COM Surrogate” 错误. 解决 ...

  5. MyEclipse中自定义maven命令(添加maven 命令)

    关于常用的Maven命令 mvn archetype:create :创建 Maven 项目 mvn compile :编译源代码 mvn test-compile :编译测试代码 mvn test ...

  6. 【转载】如何从win8/8.1中文版(核心版)升级到win8/8.1专业版

    最近帮助很多同学从win8/8.1的基础版本 - 中文版(核心版)升级到了专业版,经过咨询,升级系统的最主要原因是中文版(核心版)的功能限制,因为基础版本阉割掉了很多常用的功能,比如组策略,计算机管理 ...

  7. Delphi应用程序的调试(五)其他调试工具

    Delphi应用程序的调试(五)其他调试工具 Delphi7中提供了一些附加调试工具来帮助用户检查程序错误.从性能上讲,其中一些工具属于高级调试工具.尽管高级调试工具不像其他工具那样常用,但对于经验丰 ...

  8. Android O PackageInstaller 解析

    Android O 8.0 1.src\com\android\packageinstaller\permission\mode\PermissionGroups.java @Override pub ...

  9. 题目1458:汉诺塔III(不一样的汉诺塔递归算法)

    题目链接:http://ac.jobdu.com/problem.php?pid=1458 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...

  10. X-Requested-With导致CSRF失败

    在漫漫渗透之路中,眼前一亮的发现一个站.Referer字段没有检查,POST参数中的动态token也没有检查,这不是带一波CSRF的节奏嘛.但是遇到一个之前我没遇到的问题导致我CSRF失败,这个问题或 ...