【树——数据结构】

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. 效果等同于依次对各个树进行根遍历
森林二叉树
先根遍历先序遍历先序遍历
后根遍历中序遍历中序遍历
  • 14
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不掉发的小刘

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值