• 12.二叉树


    /*
    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 遍历二叉树
    */
  • 相关阅读:
    一天一个算法:将一个数组中的值按逆序输出
    一天一个算法:求俩个数的最大公约数和最小公倍数
    一天一个算法:给出年、月、日,计算该日是该年的第几天
    一天一个算法:递归计算函数
    一天一个算法:冒泡排序算法
    一天一个算法:猴子吃桃问题
    一天一个算法:求Sn=a+aa+aaa+…+aa…a之和
    一天一个算法:完数
    一天一个算法:水仙花数
    一天一个算法:前言
  • 原文地址:https://www.cnblogs.com/go-ahead-wsg/p/13232370.html
Copyright © 2020-2023  润新知