二叉树

Posted go-ahead-wsg

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树相关的知识,希望对你有一定的参考价值。

/*
6.5 二叉树
二叉树具有五种基本形态:
1.空二叉树。2.只有一个根节点。3.根结点只有左子树。4.根结点只有右子树。5.根节点既有左子树又有右子树。
特殊二叉树:
1.斜树 斜树一定要是斜的,但是往哪斜还是有讲究,所有结点都只有左子树的二叉树叫左斜树。所有结点都只有
右子树的二叉树叫右斜树。这两者统称为斜树(这不就是线性表么)
2.满二叉树 在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上。
3.完全二叉树 
*/

/*
6.6 二叉树的性质
二叉树有一些需要理解并记住的特性,以便我们更好的使用它。
6.6.1 二叉树性质1
    在二叉树的第i层上至多有2^(i-1)个结点(i>=1)
6.6.2 二叉树的性质2
    深度为k的二叉树至多有2^k -1个结点(k>=1)
6.6.3 二叉树性质3
    对任何一颗二叉树T,如果其终端结点数位n0,度为2的结点数为n2,则n0=n2+1
6.6.4 二叉树性质4
    具有n个结点的完全二叉树的深度为log_2 n +1
6.6.5 二叉树性质5
    如果对一颗有n个结点的完全二叉树(其深度为)的结点按层序编号(从第1层到第层,每层从左到右),对任一结点i(1<=i<=n)
    ...
*/
/*
6.7 二叉树的存储结构
6.7.1 二叉树的顺序存储结构
    前面谈到树的存储结构,并且谈到顺序存储对树这种一对多的关系结构实现起来比较困难。但是二叉树是一种特殊的树。
由于它的特殊性,使得用顺序存储结构也可以实现。
    二叉树的顺序存储结构就是用一维数组存储二叉树中的结点,并且结点的存储位置,也就是数组的下标要能体现结点之间的逻辑关系,
比如双亲与孩子的关系,左右兄弟的关系等。
    
 ******* 先来看看完全二叉树的顺序存储,一颗完全二叉树...
                
                A
        B               C
    D       E       F       G
  H   I   J

将这颗二叉树存入数组中,相应的下标对应其同样的位置,
1   2   3   4   5   6   7   8   9   10
A   B   C   D   E   F   G   H   I   J

 ****** 当然对于一般的二叉树,尽管层序编号不能反映逻辑关系,但是可以将其按完全二叉树编号,只不过,把不存在的结点设置为"^"而已。

                A
        B               C
    ^       E       ^       G
  ^   ^    J
1   2   3   4   5   6   7   8   9   10
A   B   C   ^   E   ^   G   ^   ^   J

虽然可以表示,但会有空间的浪费,对于数据比较多的树来说,树的顺序存储结构一般只用于构建完全二叉树

6.7.2 二叉链表
既然顺序存储适用性不强,我们就要考虑链式存储结构。二叉树,每个结点最多有两个孩子,所以它设计一个数据域和两个指针域是比较自然的想法,
我们称这样的链表叫做二叉链表。

//二叉树的二叉链表结点结构定义
typedef struct BiTNode
{
    //结点数据
    TElemType data;
    //左右孩子指针
    struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;

就如同树的存储结构中讨论的一样,如果有需要,还可以再增加一个指向双亲的指针域,那样就称之为三叉链表。由于加额树的
存储结构类似,这里就不详述了。
*/

/*
6.8 遍历二叉树
*/

 

以上是关于二叉树的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 二叉树

数据结构二叉树经典基础习题

数据结构 二叉树的简单理解和代码实现

用c语言写二叉树,源代码。

数据结构中二叉树的顺序存储结构代码怎么编写?

二叉树练习题