数据结构与算法—C语言描述 树和二叉树的概念和定义 (2)

有序树:将树中结点的各子树看成从左到右是有先后次序的(不能互换),则称为有序树,否则称为无序树

二叉树 二叉树的定义

满足以下两个条件的树形结构称为二叉树(Binary Tree):

每个结点最多有两棵子树(即不存在度大于2的结点)。

二叉树的子树有左右之分,其次序不能任意颠倒,即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

W_GNQN6_A8V7T__5W__2AC7.png

二叉树结点的两个孩子结点,左边的被称为左孩子(Left child),右边的被称为右孩子(Right child)。两个孩子结点也有左右之分,次序不能任意颠倒。

二叉树的五种基本形态:

image-20200425140445016.png

前面有关树的术语都适用于二叉树。

二叉树的性质

在二叉树的第i层上(i从1开始计数)最多有2i-1个结点(i>=1)。

高度为k的二叉树最多有2k-1个结点(k>=1)。

具有n(n>=1)个结点的完全二叉树的高度最多为n,最少为(log2n)+1。

对任何一棵二叉树,如果其叶结点有n个,度为2的结点有m个,则有:n=m+1。

如果对一棵有n个结点的完全二叉树(其深度为(log2n)+1)的结点按层序编号(从第一层到(log2n)+1层,每层从左到右),对任一结点i(1<=i<=n)有:

如果i=1,则结点i是二叉树的根,无双亲(属实孤儿);如果i>1,则其双亲是结点i/2。

如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i。

如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。

n个结点可以组成1/(n+1)*[(2n)!/(n!*n!)]种不同构的二叉树。

特殊二叉树

满二叉树:在一棵二叉树中,如果所有分支(非叶子结点)都存在左子树和右子树,并且所有的叶子都在同一层上(高度为k的二叉树且有2k-1个结点)。

说白了就是每个分支都是满的。

A5__6IYOPCMVWF~P~_AFRN3.png

完全二叉树:把一棵具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点和同样深度的满二叉树中编号i的节点在二叉树中位置完全相同,那么这棵二叉树被称为完全二叉树。也可以理解为把一棵满二叉树的最后一层结点,从左向右连续却掉若干个结点,那么它就是完全二叉树。

C_O8B_I_YIP_DO8_U_XU~BJ.png

(可以看到这个二叉树编号从1到12的12个结点和上图的二叉树的12个结点的位置完全对应,所以这个树是完全二叉树。)

满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。

在完全二叉树或满二叉树中,如果某个结点没有左儿子,那么他一定没有右儿子(即该结点是一个叶结点)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwsypy.html