【树——数据结构】

文章目录

1.基本概念

结点,根节点,分支结点,叶子结点,边,子树

空树:节点数为0的树

非空树的特性

  1. 有且仅有一个根节点
  2. 没有后继的结点称为叶子结点
  3. 有后继的结点称为分支结点
  4. 除了根节点外,任何一个结点都有且仅有一一个前驱

树是一种递归定义的数据结构

2.基本术语

1.结点之间的关系描述
  1. 祖先结点/子孙结点
  2. 双亲结点(父节点) /孩子结点
  3. 兄弟结点/堂兄弟结点
  4. 两个节点之间的路径:只能从上往下
  5. 路径长度:路径上经过几条边
  6. 树的路径长度:从树根到每个结点的路径长度的总和
2.结点,树的属性描述
  1. 结点的层次(深度) :从上往下数
  2. 结点的高度:从下往上数
  3. 树的高度(深度) :总共多少层
  4. 结点的度:有几个孩子(分支)
    非叶子节点的度>0
    叶子结点的度=0
  5. 树的度: 树中各结点的度的最大值
3.有序树,无序树
  1. 有序树:逻辑上看,树中节点的各子树从左至右是有次序的,不能互换
  2. 无序树:逻辑上看,树中节点的各子树从左至右是无次序的,可以互换
4.森林

森林是m (m20)棵互不相交的树的集合

3.树的性质

考点1

结点数=总度数+1

考点2
  1. 度为m的树

    任意结点的度≤m (最多m个孩子)

    至少有一个结点度=m

    一定是非空树

  2. m叉树

    任意结点的度≤m (最多m个孩子)

    允许所有结点的度都<m

    可以是空树

考点3
考点4

4.树的存储结构

双亲表示法

  1. 每个结点中保存指向双亲的"指针"
  2. 根节点存储在0, -1表示没有双亲
  3. 新增数据元素无需按逻辑上的次序存储
  4. 优点:查指定结点的双亲很方便
  5. 缺点:查指定结点的孩子只能从头遍历

孩子表示法

  1. 顺序+链式存储------指针指向第一个孩子
  2. 优点:找孩子方便
  3. 缺点:找父节点不方便

孩子兄弟表示法

  1. 用二叉链表存储树------左孩子右兄弟
  2. 孩子兄弟表示法存储的树,从存储视角来看形态上和=叉树类似
  3. 考点:树与二叉树的相互转换。本质就是用孩子兄弟表示法存储树

重要考点:树、森林与二叉树的转换

  1. 本质:用二叉链表存储森林------左孩子右兄弟
  2. 森林中各个树的根节点之间视为兄弟关系

5.树和森林的遍历

树的遍历
先根遍历 ------深度优先遍历

先根,后子树

树的先根遍历序列与这棵树相应二叉树的先序序列相同
后根遍历 ------深度优先遍历

先子树,后根

树的后根遍历序列与这棵树相应二叉树的中序序列相同
层序遍历(用队列实现)------广度优先遍历

森林的遍历
先序遍历

  1. 若森林为非空,则按如下规则进行遍历:
  2. 访问森林中第一棵树的根结点。
  3. 先序遍历第一棵树中根结点的子树森林。
  4. 先序遍历除去第一棵树之后剩余的树构成的森林。
  5. 效果等同于依次对各个树进行根遍历

中序遍历

  1. 若森林为非空,则按如下规则进行遍历:
  2. 中序遍历森林中第一棵树的根结点的子树森林。
  3. 访问第一-棵树的根结点。
  4. 中序遍历除去第一-棵树之 后剩余的树构成的森林。
  5. 效果等同于依次对各个树进行根遍历
森林 二叉树
先根遍历 先序遍历 先序遍历
后根遍历 中序遍历 中序遍历
相关推荐
aaasssdddd961 小时前
C++的封装(十四):《设计模式》这本书
数据结构·c++·设计模式
芳菲菲其弥章1 小时前
数据结构经典算法总复习(下卷)
数据结构·算法
yyyyyyykk1 小时前
数据结构--链表
数据结构·链表
我是一只来自东方的鸭.1 小时前
1. K11504 天平[Not so Mobile,UVa839]
数据结构·b树·算法
武昌库里写JAVA2 小时前
使用React Strict DOM改善React生态系统
数据结构·vue.js·spring boot·算法·课程设计
清弦墨客2 小时前
【数据结构与算法】深度优先搜索:树与图的路径探寻之道
数据结构·python·算法·蓝桥杯·深度优先
尘觉2 小时前
算法的学习笔记—扑克牌顺子(牛客JZ61)
数据结构·笔记·学习·算法
陵易居士4 小时前
力扣周赛T2-执行操作后不同元素的最大数量
数据结构·算法·leetcode
sc写算法5 小时前
Hash 映射
数据结构·算法·哈希算法
雅妮yyn5 小时前
头歌数据结构-排序的实现及其应用
数据结构·算法