目录

  • 一、二叉树的定义
  • 二、特殊二叉树
    • 2.1 斜二叉树(Skewed Binary Tree)
    • 2.2 完美二叉树(Perfect Binary Tree)
    • 2.3 完全二叉树(Complete Binary Tree)
  • 三、二叉树的几个重要性质
  • 四、二叉树的抽象数据类型定义
    • 4.1 常用的遍历方法
  • 五、二叉树的存储结构
    • 5.1 顺序存储结构
    • 5.2 链表存储


一、二叉树的定义

二叉树T:一个有穷的结点集合。

  • 这个集合可以为空
  • 若不为空,则它是由根节点和称为其左子树\(T_L\)和右子树\(T_R\)的两个不相交的二叉树组成。

二叉树具体五种基本形态

二叉树的子树有左右顺序之分

二、特殊二叉树

2.1 斜二叉树(Skewed Binary Tree)

斜二叉树如下图所示:

2.2 完美二叉树(Perfect Binary Tree)

完美二叉树也称作满二叉树(Full Binary Tree)

完美二叉树如下图所示:

2.3 完全二叉树(Complete Binary Tree)

有n个结点的二叉树,对树中结点按从上至下、从左到右顺序进行编号,编号为\(i(1\leq{i}\leq{n})\)结点与满二叉树中编号为i结点在二叉树位置相同。

完全二叉树如下图所示:

如下图所示的二叉树即不为完全二叉树:

三、二叉树的几个重要性质

  • 一个二叉树第i层的最大结点树为:\(2^{i-1}, \quad{i}\geq1\)

  • 深度为k的二叉树有最大结点总数为:\(2^k -1, \quad k\geq{1}\)

  • 对任何非空二叉树T,若\(n_0\)表示叶节点的个数、\(n_2\)是度为2的非叶结点个数,那么两者满足关系\(n_0=n_2+1\)

四、二叉树的抽象数据类型定义

类型名称:二叉树

数据对象集:一个有穷的结点集合。若不为空,则由根节点和其左、右二叉子树组成。

操作集:\(BT\in{BinTree},\quad Item \in ElementType\),其重要操作有:

  1. BooleanIsEmpty(BinTree BT):判断BT是否为空;
  2. void Traversal(BinTree BT):遍历,按某顺序访问每个结点;
  3. BinTree CreateBinTree():创建一个二叉树。

4.1 常用的遍历方法

接下来介绍几个常用的遍历方法,未来会详细讲解。

void PreOrderTraversal(BinTree BT):先序 --》根、左子树、右子树;

void InOrderTraversal(BinTree BT):中序 --》左子树、根、右子树;

void PostOrderTraversal(BinTree BT):后序 --》左子树、右子树、根;

void LevelOrderTraversal(BinTree BT):层次遍历,从上到下、从左到右

五、二叉树的存储结构

5.1 顺序存储结构

完全二叉树:按从上至下、从左到右顺序存储,n个结点的完全二叉树的结点父子关系

  • 非根节点(序号i>1)的父结点的序号是\([i/2]\);
  • 结点(序号为i)的左孩子结点的序号是2i(若\(2i\leq{n}\),否则没有左孩子);
  • 结点(序号为i)的右孩子结点的序号是2i+1(若\(2i+1\leq{n}\),否则没有右孩子)

一般二叉树也可以采用这种结构,但会造成空间浪费……

5.2 链表存储

/* c语言实现 */typedef struct TreeNode *BinTree;typedef BinTree Position;struct TreeNode{  ElementType Data;  BinTree Left;  BinTree Right;}
# python语言实现class TreeNode:     def __init__(self, x):         self.val = x         self.left = None         self.right = None

单个子节点用下图所示链表表示:

使用链表对整棵树的表示如下:

©著作权归作者所有:来自51CTO博客作者wx5b1fd43180419的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. 技术问答-23 javabean创建一个二叉树,左右两个叶子节点 (1)要求每
  2. 学习一下小顶堆
  3. 4-10(二叉搜索树)
  4. 树与二叉树入门(一)
  5. 3-14(堆的完结以及二叉树的遍历)
  6. 学习感悟一
  7. 线性表之链式存储(一)
  8. 9.6 C++指向结构体变量的指针
  9. 3-8(单链表相关算法习题+双链表)

随机推荐

  1. 如何在python 3中将单词转换为数字(自己的
  2. 【Python】Python脚本实现抢券
  3. 如何使用不同的类python在一个类中的一个
  4. 安装numpy+scipy+matlotlib+scikit-learn
  5. Linux或Linux虚拟机桥接模式使用Python2
  6. [LeetCode][Python][C#]刷题记录 1. 两数
  7. Python3基础教程-廖雪峰[带标签完整版]
  8. wxPython 显示一张图片
  9. eclipse调用python模块是出错及解决
  10. py2exe使用相对路径的当前目录问题