文章目录

  • 概念
  • 树的分类
  • 树的数据结构
  • 总结
  • 参考

概念

A tree is a nonlinear data structure, compared to arrays, linked lists, stacks and queues which are linear data structures. A tree can be empty with no nodes or a tree is a structure consisting of one node called the root and zero or one or more subtrees.

树是一个非线性的数据结构,相比较而言,数组,链表,栈和队列等等就是线性的数据结构。树可以为空,不包含任何节点,或者树可以称为由一个根节点和零个或者多个子树构成的。

判断是否是一颗树的条件:

  • 有且只有一个根节点;
  • 有若干个互不相交的子树;
  • 根节点(root)没有父节点;
  • 一个节点有且只有一个父节点(根节点除外);
  • 节点可以有多个子节点;

和树相关的一些术语,查阅了网上的一些资料,做了一下整理;

Terminology(术语) Explaining(解释)
Root(根) 树中的顶级节点
Child(子节点) Root的每一个子树的叫做Root的子节点(Child)
Parent(父节点) Root是每一个子树的的父节点(Parent)
Siblings(兄弟节点) 一些具有相同父节点的节点称为兄弟节点
Descendant(后代) 对任意节点x,从根节点到节点x的所有节点都是x的祖先
Ancestor(祖先) 对任意节点x,从节点x到叶子节点的所有节点都是x的后代
Leaf(叶子节点) 没有子节点的节点
Degree(度) 子节点的个数(最大子节点的度称为树的度)
Edge(边) 父节点和子节点相连的一个路径
Depth(深度) 节点的深度定义为:当前节点和根之间的边数。
Height of node(节点的高) 节点的高度是该节点与后代节点之间最长路径上的边数,所以叶子节点高度为0
Height of tree(树的高) 树的高度是其根节点的高度
Forest (森林) 多颗互不相交的树组成的集合

树的分类

按照个人的理解进行分类;

  • 一般树:任意一个节点的子节点的个数都不受限制;
  • 二叉树:任意一个节点的子节点的个数最多只有两个;
    • 一般二叉树
    • 满二叉树:在不增加树的层数的前提下,无法再多添加一个节点的二叉树
    • 完全二叉树:如果只是删除了满二叉树的最底层最右边的连续若干个节点,则这样形成的二叉树叫完全二叉树;
  • 森林:n个互不相交的树的集合;

树的数据结构

typedef struct TreeNode *PtreNode; //前向声明struct TreeNode {ElementType element;PtreNode   FirstChild;PtreNode NextSibling;
}

总结

大部分的知识点主要参考了wiki上的解释,这里对于二叉树的分类都是点到即止,其实需要自己结合实践写代码实现一下,深入了解知识点和应用场景,以加深理解,如有错误的地方,希望指正。

参考

Tree_(data_structure)
树的遍历

数据结构学习:什么是树?相关推荐

  1. 数据结构学习笔记(树、二叉树)

    树(一对多的数据结构) 树(Tree)是n(n>=0)个结点的有限集.n=0时称为空树.在任意一颗非空树种: (1)有且仅有一个特定的称为根(Root)的结点: (2)当n>1时,其余结点 ...

  2. 数据结构学习笔记4 树的基础知识

    树的基本概念 从根结点出发,依次长出各个分支,到达下一级结点,分支又叫做边. 若下一级结点又有新的分支,可以称作分支结点,反之则称为叶子结点. 特别的,空树是结点数为0的树.空树没有根结点,而非空树有 ...

  3. 数据结构学习笔记(3-5):树

    附录:所有blog的链接 数据结构学习笔记(1):基本概念 数据结构学习笔记(2):线性结构 数据结构学习笔记(3-5):树 数据结构学习笔记(6-8):图 数据结构学习笔记(9-10):排序 数据结 ...

  4. 数据结构学习——哈夫曼树

    数据结构学习记录DAY13 :哈夫曼树(上) 哈(赫)夫曼树和哈(赫)夫曼编码 路径 一个结点到另外一个结点的通路,称为路径 (祖先结点到子孙结点) 路径长度: 每经过一个结点,路径长度就增加1,不包 ...

  5. 《数据结构、算法与应用 —— C++语言描述》学习笔记 — 竞赛树

    <数据结构.算法与应用 -- C++语言描述>学习笔记 - 竞赛树 一.赢者树 二.二叉树的数组描述(补充) 1.声明 2.实现 三.赢者树 1.抽象数据类型 2.赢者树的表示 3.声明 ...

  6. 数据结构学习笔记(七):哈希表(Hash Table)

    目录 1 哈希表的含义与结构特点 1.1 哈希(Hash)即无序 1.2 从数组看哈希表的结构特点 2 哈希函数(Hash Function)与哈希冲突(Hash Collision) 2.1 哈希函 ...

  7. 数据结构学习笔记(六):二叉树(Binary Tree)

    目录 1 背景知识:树(Tree) 2 何为二叉树(Binray Tree) 2.1 二叉树的概念与结构 2.2 满二叉树与完全二叉树 2.3 二叉树的三种遍历方式 3 二叉树及其遍历的简单实现(Ja ...

  8. 算法设计和数据结构学习_2(常见排序算法思想)

    一般约定我们是按照从小到大的顺序排序. 按照向量的形式来参考排序中数组元素的相对位置,行向量中最左边为数组的第一个元素,且称为前面.列向量中最上面的元素为数组的第一个元素,也是称为前边. 对常见的排序 ...

  9. 算法与数据结构学习路线

    随着科学技术的发展,人工智能已经逐渐渗透到各个行业,这是一个相当有前景的专业领域. 其中,算法工程师这一职位更是非常火爆,在急缺大量人才的同时,也吸引了众多求职者,那么,初学者该如何学好算法呢? 算法 ...

  10. 数据结构学习(考研408)

    112 目录 其他 开端 线性表 栈和队列 栈 队列 队列和栈的应用 矩阵的压缩存储 串 KMP算法 树 相关概念术语 二叉树 二叉树的遍历 树与森林 树的应用 图 图的相关概念 图的存储 图的遍历: ...

最新文章

  1. 清华大学赵劲松:预知潜在风险,做化工安全科技创新的引领者
  2. NAACL19笔记:自然语言处理应用的实用理解(多图解链接)
  3. 图 深度优先遍历 广度优先遍历 非递归遍历 图解算法过程
  4. 使用 GMap.NET 实现添加标注、移动标注功能。(WPF版)
  5. matlab 符号表达式 系数 小数,matlab符号表达式系数
  6. 下列哪一项不是计算机网络的典型应用,09级计算机信息网络试卷A
  7. asp.net ajax 怎么获取前端ul li_useEffect Hook 是如何工作的(前端需要懂的知识点)
  8. 微软Silverlight==跨浏览器、跨客户平台的技术
  9. 不同内存区域的功能和特点
  10. wos 文献被引_全世界最权威的文献检索工具,这6个检索技巧必须要掌握!
  11. android studio进度条的应用,Android Studio实现进度条效果
  12. 软件dfmea_DFMEA与PFMEA之间不得不说的关系
  13. 中国参与互联网下一代根服务器建设
  14. 花两年时间去面试一个人——给准备面试的启发
  15. 9个动作让网站3天被百度收录!
  16. 移动硬盘做pe启动盘
  17. 算法笔记 : 透视变换(透射变换)
  18. ESP8266 阿里云物联网平台 (详细步骤)
  19. Android Studio(AS)连接mumu模拟器的方法
  20. 分治法查找数组元素的最大值和最小值(python实现)

热门文章

  1. mac上编写运行shell script(shell脚本)
  2. 5月31日服务器维护更新公告,绝地求生5月31日更新内容
  3. vs2015+Qt5.7编译生成的程序在xp中运行提示不是有效的win32程序解决方案
  4. 网易云音乐播放背景随歌曲封面变化
  5. 【TiDB】一些很有意思的sql调优案例分享
  6. 关于网站证书布置了但是还是显示不安全
  7. Solr学习笔记(三)-----SpringDataSolr操作
  8. html5如何利用rem实现自适应布局,使用Rem布局实现自适应
  9. linux符号链接命名,Linux文件属性及软链接
  10. 识别鲜花的App都有哪些?识花软件哪个好