第6章 树---二叉树
二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两颗互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
二叉树的特点:
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/SakQ3WeXreGgueOMJ9KCbA==/6632187068536396526.png)
# 空二叉树。
# 只有一个根结点。
# 根结点只有左子树。
# 根结点只有又子树。
# 根结点既有左子树又有右子树。
三个结点的二叉树有五种形态:
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img0.ph.126.net/hGCjE5lagfxGztbqAJ52Ig==/6631476784027962591.png)
特殊的二叉树
# 斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。
# 满二叉树:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/Tc1yAJm5bhYsPERcPGCZhw==/6631765955586055829.png)
满二叉树的特点有:
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/5zxI0zAPEgscTRAY42pAIw==/6632157381722446685.jpg)
# 完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i(1<i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img1.ph.126.net/20hOwfQD4hCEiT0jznbTxA==/6631770353632566964.png)
完全二叉树的图
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img0.ph.126.net/xBQ-V_MpizF0eUj3vz_QEg==/6632061724210828656.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img1.ph.126.net/pttJ77_Fv_MaGEgkSNfL1w==/6631542754725615514.png)
二叉树的性质
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/fpAx3p5x53kIc0zyoxSnGw==/6631881404303878199.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img0.ph.126.net/p1pPU5HhvZ34Q0JT040Nnw==/6632032037396879835.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img0.ph.126.net/NxYSZzb6vqs9GbeMz24VUA==/6632011146675951498.jpg)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img0.ph.126.net/y8w6_Rlzg9IKf0ytjaXUvw==/6632106804187569243.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img1.ph.126.net/oxEOtitycI8wHCURzQlXiA==/6631923185745733132.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/tiHXYxiScrH_QGJULDmNxw==/6631904494048057247.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/mWUSR-dbQ_q35GZVaxKgHg==/6631585635679110512.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/3bbw8QytlIDjkgiokBHo8A==/6632119998327101093.png)
二叉树的顺序存储结构
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/4spqT8MsBGhoR7_vM5DQ9Q==/6632188168048026389.png)
二叉链表:二叉树每个结点最多有两个孩子,所以为它设计一个数据域和两个指针域,我们称这样的链表叫做二叉链表。
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img1.ph.126.net/u23KHTOfFqG0xNLazv8Wng==/6631926484280611288.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/_ArfFzvL0H_AUsbAzJI2yw==/6631958370117822548.png)
二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。
二叉树的遍历方法
# 前序遍历:规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历又子树。如图6-8-2所示,遍历的顺序为:ABDGHCEIF
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img0.ph.126.net/M_ldsQGrFqWLb742UnWwTQ==/6631460291353545096.png)
# 中序遍历:规则是若树为空,则空操作返回,否则从根结点开始(注意并不是先访问根结点),中序遍历根节点的左子树,然后是访问根结点,最后中序遍历右子树。如果6-9-3所示,遍历的顺序为:GDHBAEICF。
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img1.ph.126.net/4qCVo8RgSsuT5ebEkAALgw==/6631748363400022573.png)
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img1.ph.126.net/ZhK7RA4OznHtthvm6Ao08g==/6631875906745736206.png)
# 层序遍历:规则是若树为空,则空操作返回,否则从树的第一层,也就是根结点开始访问,从上而下逐层遍历,在同一层中,按从左到右的顺序对结点逐个访问。如图6-8-5所示,遍历的顺序为ABCDEFGHI。
![第6章 树---二叉树 - 影魔 - 影魔的博客](http://img2.ph.126.net/vRVPqtWsZL2vaI0bjZwYdA==/6631795642400012528.png)