二叉树:树型结构的一种,他的特点是每个结点至多只有两棵子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。
树的结构定义是一个递归定义,即在树的定义中又用到树的概念,它道出了树的固有特性。
树的度:树内各结点的度的最大值。
层次:结点的层次从根开始定义,根为第一层,根的孩子为第二层。
树的深度:树种结点的最大层次。
有序树:树种结点的各子树从左到右是有次序的,有序树中最左边的子树的根称为第一个孩子。
孩子:结点的子树的根称为该结点的孩子,该结点称为孩子的双亲。
二叉树的5种基本形态:
空二叉树;仅有根结点的二叉树;右子树为空的二叉树;左右子树均非空的二叉树;左子树为空的二叉树。
二叉树的重要性质:
1.在二叉树的第i层上至多有2^(i-1)个结点。
2.深度为K的二叉树至多有2^k-1个结点。
3.对任何一棵二叉树T,如果其终端结点树为n0,度为2的结点树为n2,那么n0=n2+1。
4.具有n个结点的完全二叉树的深度为不大于|log2(n)|的最大整数+1.
5.如果对一棵有n个结点的完全二叉树的结点按层序编号(从第一层到第|log2(n)|+1层,每层从左到右),则对任一结点i,有如下结论:
(1).如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲PARENT(i)是结点不大于(i/2)的最大整数。
(2).如果2i>n,则结点i无左结点(结点i为叶子结点);否则其左孩子是结点2i。
(3).如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1.
.满二叉树:一棵深度为k且有2^k-1个结点的二叉树的称呼。
二叉树的存储结构:
1.二叉链表:含有两个指针域的结点结构,左右指针域
2.三叉链表:含有三个指针域的结点结构,左右指针域和指向双亲的指针域。
在二叉树的一些应用中,常常要求在树中查找具有某种特征的结点,或者对树中全部结点逐一进行某种处理。
遍历对线性结构来说是一个容易解决的问题,而对二叉树则不然,由于二叉树是一种非线性结构,每个结点都可能有两棵子树,因此需要寻找一种规律,以便二叉树结点能排列在一个线性队列上,从而便于历。
若限定先左后右可分为3种:先(根)序遍历;中(根)序遍历;后(根)序遍历。
以二叉树表示表达式的递归定义:若表达式为数或简单变量,则相应二叉树中仅有一个根结点,其数据域存放该表达式信息;若表达式=(第一操作数)(运算符)(第二操作数),则相应的二叉树中以左子树表示第一操作数,右子树表示第二操作数,根结点的数据域存放运算符(若为一元算符,则左子树为空)。操作数本身尤为表达式
树的存储结构如下3重常用的链表结构:
双亲表示法:每个结点中附设一个指示器只是双亲结点在链表中的位置;——–找双亲容易,找孩子难
孩子表示法 :多重链表—–找孩子容易,找双亲难;
孩子兄弟表示法:链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点。firstchild和nextsibling.这种存储结构便于实现各种树的操作。容易实现找结点孩子等的操作。如果为每个结点增设一个PARENT域,则同样方便实现找双亲操作。
遍历二叉树:
线索二叉树:
由于二叉树和树都可用二叉链表作为存储结构,则以二叉链表作为媒介可导出树与二叉树之间一个对应关系。