二叉树(Binary Tree)是 n (n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树额右子树组成。
二叉树特点:
1、每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。
2、左子树和右子树是有顺序的。
3、即使树中某结点只有一个子树,也要区分它是左子树还是右子树。
二叉树的五种形态:
1、空二叉树
2、只有一个根结点
3、根结点只有左子树
4、根结点只有右子树
5、根结点既有左子树又有右子树
特殊二叉树:
1、斜树:所有的结点都只有左子树的二叉树叫左斜树。都只有右子树的二叉树叫做右斜树。统称为斜树。
2、满二叉树:一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
2.1、叶子只能出现在最下一层
2.2、非叶子结点的度一定是2
2.3、同样深度的二叉树中,满二叉树的结点个数最多,叶子数最多
3、完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
3.1、叶子结点只能出现在最下两层。
3.2、最下层的叶子一定集中在左部连续的位置。
3.3、倒数第二层,若有叶子结点,一定都是右部连续位置。
3.4、如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。
3.5、同样结点数的二叉树,完全二叉树的深度最小。
二叉树性质:
1、二叉树的第i层上至多有2^(i-1)个结点(i≥1)。
2、深度(层数)为k的二叉树至多有2^k-1个结点(K≥1)。
3、对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。
假设度为1的结点数为n1,树T的结点总数n=n0+n1+n2。-> n-1=n1+2n2 -> n1+2n2+1=n0+n1+n2 -> n2+1=n0。
4、具有n个结点的完全二叉树的深度为└log2N┘+1。(└X┘表示不大于X的最大整数)
深度为k的满二叉树的结点数n=2^k-1。-> k=log2(n+1)。
完全二叉树中k=log2(n+1)。
证明:2^(k-1)-1<n≤2^k-1,由于结点数n是整数,n≤2^k-1意味着n<2^k; n>2^(k-1)-1意味着n≥2^(k-1),-> 2^(k-1)≤n<2^k。-> k-1≤log2(n)<k,k作为度数是一个整数,所以k=└log2n┘+1。
5、如果对一棵有n个结点的完全二叉树(深度为└log2N┘+1)的结点按层序编号(从第一层到第└log2N┘+1层,每层从左到右),对任一结点i(1≤i≤n)有:
5.1、如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则双亲结点└i/2┘。
5.2、如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i。
5.3、如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。
二叉树的遍历(traversing binary tree):
是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
二叉树的遍历方法:
前序遍历(根左右):若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树。ABDGHCEIF
中序遍历(左根右):若树为空,则空操作返回,否则从根结点开始,中序遍历根结点的左子树,然后是访问根结点,最后中序遍历右子树。GDHBAEICF
后序遍历(左右根):若树为空,则空操作返回,否则从左到右先叶子后结点的方式遍历访问左右子树,最后访问根结点。GHDBIEFCA
层序遍历:若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。ABCDEFGHI
■ 已知前序遍历序列和中序遍历序列,可以唯一确定一棵二叉树
■ 已知后序遍历序列和中序遍历序列,可以唯一确定一棵二叉树
■ 已知前序遍历和后序遍历,不能确定一棵二叉树