1、基本概念
叶子节点:叶子节点只有父节点没有子节点;
根节点:起始的节点叫做根节点,整棵树只有一个根节点;
父节点:除了根节点之外,每个节点都有且只有一个父节点;
满二叉树:每个枝节点都有两个子节点,则该二叉树叫做满二叉树;
完全二叉树:二叉树中除了最下面一层之外,每层节点个数均达到最大值,并且最下面一层的节点都连续集中在左侧,则该二叉树叫做完全二叉树;
2、基本特征
二叉树具有递归嵌套式的空间结构,也就是说对于一棵二叉树来说,可以拆分为若干个小二叉树组成,因此采用递归的方法处理二叉树比较方便,处理方式如下:
处理(二叉树)
{
if(是空树) 直接处理完毕;
else
{
处理根节点;
处理左子树; => 递归
处理右子树; => 递归
}
}
3、二叉树遍历3.1 所谓遍历(Traversal)是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问 题。
遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算的基础。
3.2 二叉树遍历方式:先序遍历、中序遍历(投影)、后序遍历
图 3.2 二叉树遍历
4、存储结构
4.1 线性(顺序)存储结构
一般来说,从上到下,从左到右依次存储节点,对于非完全二叉树来说,采用虚节点来补成完全二叉树
二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。因此,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号,缺点是有可能对存储空间造成极大的浪费,在最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点存储空间。依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系。图4.1.1(a)是一棵完全二叉树,图4.1.1(b)给出的图4.1.1(a)所示的完全二叉树的顺序存储结构。