• 二叉树的实现


    一、vector和list的不足:无法兼顾静态操作和动态操作的性能


     二、半线性结构:树 层次关系的表示

    •  RPN表达式: 1 2 + 3  +

        

    • 域名系统 、大学系统

    rooted tree (有根树),子树(subtree)


    ri称为r的孩子(child),ri之间互称为兄弟(sibling)。r为其父亲(parent) d = degree(r)为r的度(degree).

      可归纳如下性质:一棵树的总体规模可以度量为它的顶点数(n)加上边数(e)

       e = degree(r) = n -1  

    ordered tree (有序树) :给树的各个孩子进行编号。

      


    三、通路和环路

      

     

    树是一种连通无环图,任一节点v与根节点之间存在唯一路径:path(v,r) =  path(v);

      


    四、深度和层次

        depth(v) =|path(v)| : v所对应的的路径长度path(v)称为节点v在树中的深度。

        路径、节点和子树可以互相指代。

      path(v)上的节点称为v的祖先(ancestor),v是他们的后代,除自身外,是真(proper)祖先/后代。

    •   

       

     半线性结构:在任一深度,v的祖先若存在,则必然唯一,v的后代若存在,则未必唯一。将v的祖先看做前驱,后代看做后继,则前驱必然唯一,后继不唯一。

    根节点是所有节点的公共祖先,所对应路径的长度为0,所以深度也为0. 没有后代的节点称为叶子(leaf)。所有叶子深度的最大者,称为树的高度。子树的高度就是根节点的高度。

    空树的高度设为-1(现在还不容易理解)。

    depth(v) +height(v) <= height(T);  父亲的高度要大于儿子节点的高度。


    五、树的接口:

      

     父节点:

      

     孩子节点:

            

     父亲和孩子:

      

    长子+兄弟法:

        


     六、二叉树(binTree)

      节点度数不超过2的树,称作二叉树(binary tree)。

      

     满二叉树

      

     宽度涨的很快,高度很慢。

      6.1 真二叉树

      每个节点的度都是偶数(2或者0)。 节点有几个分叉,树的度就是几。

      6.2 多叉树

        二叉树是多叉树的特例,但在有根且有序时,二叉树可以表示多叉树

        多叉树通过“长子兄弟法”可以表示为二叉树:(所以只要仔细研究二叉树就可以了

      


    七、二叉树实现

      

    二叉树节点(BinNode):每个节点通过引用指向其他节点。

     

    7.1 插入孩子节点:O(1)

      

     

      

     7.2 树的规模:O(n)线性时间

      


    BinTree模板类:

      二叉树高度更新:空树h = -1 ,单个节点树h = 0.

        

     高度更新:

      

     更新节点v及其历代祖先的高度:

      

     


    节点插入算法:

      将新的节点插入已有树的右孩子:

      

     


       

                      

                    

    陈小洁的三只猫
  • 相关阅读:
    滴水穿石Pydoop 架构和模块包介绍
    滴水穿石SSH Secure Shell Client安装和使用
    安装memcache到CentOS(另附yum法)
    php文件锁(转)
    MySQL中distinct和group by性能比较
    php中的自动加载
    php注释标准
    新浪API40310错误解决方法
    CentOS 5.5使用yum来安装LAMP(php运行环境)(转)
    MySQL优化之COUNT()效率
  • 原文地址:https://www.cnblogs.com/ccpang/p/11446820.html
Copyright © 2020-2023  润新知