首页 > 代码库 > 树与二叉树

树与二叉树

一、树

1. 树的定义

  • 非线性数据结构
  • 除根节点外,一个直接前驱,多个直接后继

2. 树的逻辑表示方法

  • 树形表示法

3. 树的基本术语

  • 结点的度、树的度、m次树
  • 分支结点、叶子结点
  • 路径、路径长度
  • 孩子结点、双亲结点、兄弟节点、子孙结点、祖先结点
  • 结点的层次、树的高度(深度)
  • 有序树、无序树
  • 森林

4. 树的性质

  •  4个性质

5. 树的基本运算

  • 查找
  • 插入或删除
  • 遍历

 6. 树的存储结构

  • 双亲存储结构:用一个数组存储结构体(数据+指向双亲的指针)
  • 孩子链存储结构:根据树的度确定指向孩子指针的个数,结构体(数据+指向孩子结点的指针数组)
  • 孩子兄弟链存储结构:一个数据元素域、一个指向第一个孩子的指针、一个指向下一个兄弟结点指针域

二、二叉树

1. 二叉树的概念

  • 结构简单、存储效率高、运算算法相对简单
  • 任何m次树都可以转换为二叉树
  • 严格区分左右子树
  • 五种基本形态:空、单结点、右为空、左为空、左右不为空
  • 满二叉树:完全二叉树的一种特例
  • 完全二叉树:最下面一层叶子结点都排列在左边,满二叉树是完成二叉树的一个特例

2. 二叉树的性质

  • 4个性质 

3. 二叉树与树、森林之间的转换(一一对应)

  • 森林、树转二叉树
    • 加水平线
    • 删连线
    • 旋转45度 

 技术分享

  • 二叉树还原为森林、树
    • 删右孩子连线  
    • 与双亲结点连线  

 技术分享

 

4. 二叉树存储结构

  • 顺序存储结构:
    • 存储在数组  
    • 树结点编号,按照编号存储在对应的下标,空分支用#补齐
  • 链式存储结构:左子针域、值域、右子针域

树与二叉树