zoukankan      html  css  js  c++  java
  • C++数据结构——树(基础知识篇)

    目录
    C++数据结构——树(基础知识篇)

    1. 简介

    2. 基本结构

    3. 基础知识
      3.1 术语
      3.2 树的表示方式
      3.3树的分类

    4. 树的遍历

    5. 简介
      ​ 树是数据结构中的重点,也是我们学习数据结构这门课程中的难点,接下来我们会先来介绍一下树这种数据结构中的一些基础知识,为我们后面的学习打下基础。
      本篇博客不涉及代码实现,只有理论知识,所有的代码实现会另起篇幅。

    6. 基本结构

    一棵树是N个节点和N-1条边的集合,其中一个节点叫做根节点,每条边都将某个节点连接到它的父亲,而除去根节点外每个节点都只有一个父亲,每个子节点之间互不相交。
    3. 基础知识
    3.1 术语
    1.节点的度:节点的子节点(子树)个数。例如上图中:节点2的度为3,因为它有456三个子节点。
    2.树的度:树中节点的最大的度。
    3.叶子节点:度为0的节点。上图中节点45678都是叶子节点
    4.父节点:顾名思义,当前节点的父亲,就像人际关系一样,例如:节点1是节点2和节点3的父亲。子节点,祖父节点,兄弟节点等等之类的以此类推就行了。
    5.路径和路径长度:路径是一个节点序列,是多个节点的集合,而路径的长度为路径所包含的边的个数,例如:从节点1到节点4的路径为1-2-4,路径长度为2。
    6.节点的层次:规定根节点在第一层,其他的节点层次是其父节点的层次+1。
    7.树的深度:树中最大的层次就是树的深度。
    8.树的高度:与深度相反,高度的第一层是深度的最后一层,树的高度与深度一致(深度是从上往下数,高度是从下往上数)
    3.2 树的表示方式
    树有基本的三种表示方式,分别是双亲表示法、孩子表示法、孩子兄弟表示法。
    由于双亲表示法和孩子表示法局限太大而且不常用(有兴趣的读者可以自己去查阅一下其他资料),我们重点介绍一下孩子兄弟表示法。

    又是这张图,我们已经很清楚图中各个节点之间的关系了,而这种树的子节点个数并不统一,有两个的有三个的,这样我们在创建结构体(类)的时候会十分困难,那么有没有一种方法可以让他们的结构统一起来呢,这就是我们的孩子兄弟表示法的由来。我们把它稍微变一下,它就变成了这样:

    我们会发现经过转换,他们的子节点至多有两个(也就是整棵树的度为2),分别表示他们的孩子和兄弟,而且这种转换并不会使关系混乱,例如节点2是节点4的父节点,而456三个节点是兄弟节点,说明456都是2的孩子,我们通过这种方式把普通的树转换成为了一颗二叉树(度为2的树)
    3.3树的分类
    ​ 二叉树:二叉树是一颗树,其中每个节点都不能多于两个儿子
    ​ 满二叉树:除了叶子节点,每个节点的度都是2
    ​ 完全二叉树:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。
    ​ 至于其他的高级树形结构我们以后的文章在单独列出。
    4. 树的遍历
    树有四种遍历方式,分别是先序、中序、后序、层次遍历。
    先序、中序、后序遍历是以根节点的遍历顺序作为依据:
    先序遍历的顺序是根节点--->左子树--->右子树,中序是左根右,后序是左右根
    我们以下面的这张图为例

    它的先序、中序、后序遍历顺序分别是:
    12453678、42513768、42578631
    层次遍历最简单:12345678就是层次遍历的顺序了,按照从上到下,从左往右。

  • 相关阅读:
    Git常用命令整理
    JavaScript常用代码书写规范
    程序猿常用英语单词汇总
    15个常用的javaScript正则表达式
    [Java复习] 服务注册中心 (Eureka, Zookeeper)
    [Java复习] 面试突击
    [Java复习] 面试突击
    [Java复习] 面试突击
    [Java复习] Spring Cloud
    [Java复习] 微服务
  • 原文地址:https://www.cnblogs.com/seaw/p/13927837.html
Copyright © 2011-2022 走看看