树的概念

121 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第30天,点击查看活动详情

前言

树的概念比较多,用处很多。存在方方面面,比如linux内核中用了挺多树的算法,文件目录的实现,比如咱们常用的xml/json数据结构就是树结构的,比如前面使用的桶排序也使用了树的概念。还有咱们的社会构成关系,政府组成关系。树的概念算是计算机编程知识里的基础知识。
学习好树的知识,对于咱们扎实编程的能力更有好处。

啥是树呢?

定义:树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
树是一种一对多的数据结构。包含n个节点,n等于0时,树称为空树。其中特定的一个节点称为根节点,根节点是唯一的。每个节点都可以看成一棵树。所有的子树构成一个树,且子树相互之间不是相交的。

子节点

当前节点拥有的子树的根节点称为该节点的子节点。

父节点

一个节点的前驱节点称为该节点的父节点。

节点的度:节点拥有的字节点的个数。 树的度:节点的度的最大值称为该树的度。

叶子节点

度为零的节点,称为叶子节点。

兄弟节点

同一个父节点的那些节点的关系

节点层树

从跟节点开始算起,计数从1开始计算。
image.png

堂兄弟节点

父节点在同一层次的子节点的关系。

深度

节点深度:节点的层次就是该节点的深度; 树的深度:节点的深度的最大值。
有的博文按照从0开始计算,有一些教材是从1开始计算,咱们这里从1开始计算,少记一些概念,多点脑子记其他的重要知识,还不容易混乱。

高度

节点高度:从该节点往下到某个叶子节点的最大值 树的高度:从根节点到叶子节点的最大值,值与深度相等。

分类

树构建的类型

  • 无序树,又称自由树,基本不用
  • 有序树:兄弟节点之间有顺序关系
  • 二叉树:每个节点最多只能有两个字节点的树
    1. 完全二叉树:如树深度为d,则d-1层节点满字节点,d层叶子节点从左向右满排列。

image.png
  1. 平衡二叉树:任何节点的子树高度差不能超过1,下图所示可称为一个平衡二叉树。
image.png
  1. 满二叉树:每个层级的节点数能达到最大。
image.png

满二叉树,如层数为d层,则总共包含有2n1 2^n-1个节点。
第i层节点树:2i12^{i-1}

遍历

二叉树的节点遍历:前序遍历,中序遍历,后序遍历。

  • 前序遍历: 根节点-》左字节点-》右字节点
  • 中序遍历:左字节点-》根节点-》右字节点
  • 后序遍历:右字节点-》左字节点-》根节点