数据结构——3.2 二叉树及存储结构

一、二叉树的定义

二叉树T:一个有穷的结点集合,这个集合可以为空;若不为空,则它是由根结点和称为其左子树TL右子树TR的两个不相交的二叉树组成。

1)二叉树的五种基本形态
在这里插入图片描述

2)二叉树的子树有左右顺序之分
在这里插入图片描述

3)特殊的二叉树

  • 斜二叉树:只往一边倒,只有左儿子,没有右儿子或只有右儿子没有左二子。相当于链表,形成了一个线性结构
    在这里插入图片描述

  • 完美二叉树、满二叉树:除了最底层的结点以外,每个结点都有两个儿子
    在这里插入图片描述

  • 完全二叉树:有n个结点的二叉树,对树中结点按从上至下、从左到右顺序进行编号,编号为i(1<=i<=n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同
    在这里插入图片描述

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

1)一个二叉树第i层的最大结点数为2^(i-1),i>=1
2)深度为k的二叉树有最大结点总数为:2^k - 1,k>=1,推导:sum(2^(i-1)),满二叉树
3)对任何非空二叉树T,若n0表示叶结点的个数,n2是度为2的非叶结点个数,那么两者的关系满足n0 = n2 + 1
在这里插入图片描述

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

在这里插入图片描述

常用的二叉树遍历方法

在这里插入图片描述

四、二叉树的存储结构

1、顺序存储结构

完全二叉树

比较适合这种结构:按从上至下、从左到右顺序存储n个结点的完全二叉树的结点父子关系:
在这里插入图片描述
这样,不仅能保证每个结点按顺序存储,更重要的是已知任何结点,都可以找出左儿子,右儿子和父结点在哪。

一般二叉树

也可以采用这种结构,但会造成空间浪费。即把一般二叉树补充为完全二叉树,想隐去的结点在数组里留下一个空位
在这里插入图片描述

2、链表存储

结点形式:

在这里插入图片描述
在这里插入图片描述

例子

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/CSDN_dzh/article/details/83717821