zoukankan      html  css  js  c++  java
  • 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 遍历二叉树
    */
  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/go-ahead-wsg/p/13232370.html
Copyright © 2011-2022 走看看