树的上课笔记

来源:互联网 发布:java collectionutils 编辑:程序博客网 时间:2024/06/09 19:55

    树定义:
        专业的定义:
            1.有且只有一个称为根的节点
            2.有若干个互不相交的子树,这些子树也是一棵树
        通俗的定义:
            1.树是由节点和边组成
            2.每一个节点只有一个父节点,但可以有多个子节点
            3.但有一个节点例外,该节点没有父节点,此节点称为根节点
        专业术语:
            节点      父节点      子节点       子孙        堂兄弟    
            深度:
                从根节点到最多底层节点的层数称之为深度
                根节点是第一层
            叶子结点:
                没有子节点的节点
            非终端节点
                实际就是非叶子节点
            度
                子节点的个数称为度
    
    树的分类:
        一般树

            任意一个节点的子节点的个数都不受限制


        二叉树
            任意一个节点的子节点个数最多两个,且子节点的位置不可更改
            分类:
                一般二叉树
                满二叉树
                    在不增加数的层数的前提下无法在添加一个节点的二叉树就是满二叉树
                完全二叉树

                    如果只是删除了满二叉树最底层最右边的连续若干个节点,这样形成的  二叉树就是完全二叉树


        森林
            n个互不相交的树的集合
    
    树的存储 :
        二叉树的存储
            连续存储[完全二叉树]
                数组存法:
                    优点:
                        查找某个节点的父节点和子节点(也包括判断有没有子节点)速度快
                    缺点:
                        耗内存空间大
            链式存储

                链表存法:


        一般树的存储
            双亲表示法:
                每一个元素存的是父亲的下标

                求父节点方便


            孩子表示法:
                每一个元素的孩子节点

                求子类点方便


            双亲孩子表示法:
                每个元素存的是父亲的下标和孩子的节点

                求父节点和子节点都方便


            二叉树表示法:
                把一个普通树转化为二叉树存储
                *具体转换方法:
                    设法保证任意一个节点的
                        左指针域指向它的第一个孩子
                        右指针域指向它的兄弟节点
                    只要满足此条件,就可以把一个普通树转化为二叉树

                    一个普通树转化成的二叉树一定没有右子树


        森林的存储

            先把森林转化为二叉树,再存储二叉树


    二叉树操作:
        遍历:

            先序遍历(先访问根节点):

                先访问根节点
                再先序访问左子树

                再先序访问右子树


            中序遍历(中访问根节点):
                中序遍历左子树
                再访问根节点

                再中序访问右子树


            后序遍历(后访问根节点):
                中序遍历左子树
                中序遍历右子树

                再访问根节点


        已知两种遍历序列求原始二叉树
            只有先和中,中和后可以推算出二叉树的原始样子

            通过先和后是无法推算出原始的二叉树的


    应用:

        树是数据库组织一种重要形式
        操作系统子父进程的关系本身就是一棵树
        面向对象语言中累的继承关系本身就是一棵树
        赫夫曼树

0 0
原创粉丝点击