树相关

Posted jiefangzhe

tags:

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

    树
            树定义
                    专业定义:
                      1、有且只有一个称为根的节点
                      2、有若干个互不相交的子树,这些子树本身也是一棵树
                      
                    通俗定义:
                        1、树是由节点和边组成
                        2、每个节点只有一个父节点但可以有多个子节点
                        3、但有一个节点例外,该节点没有根节点,此节点称为根节点
                
                    专业术语
                        节点    父节点      子节点
                        子孙    堂兄弟      
                        深度:
                            从根节点到最底层节点的层数称之为深度
                            根节点是第一层
                        叶子节点;(叶子就不能劈叉了)
                            没有子节点的节点
                        非终端节点:
                            实际就是非叶子节点。
                        根节点既可以是叶子也可以是非叶子节点
                        度:
                            子节点的个数称为度。(一棵树看最大的)            
            树分类:
                一般树
                    任意一个节点的子节点的个数都不受限制
                二叉树(有序树)
                    任意一个节点的子节点的个数最多两个,且子节点
                    的位置不可更改。
                    
                    分类:
                        一般二叉树
                        满二叉树
                            在不增加树的层数的前提下。无法再多
                            添加一个节点的二叉树就是满二叉树。
                        完全二叉树
                            如果只是删除了满二叉树最底层最右边的
                            连续若干个节点,这样形成的二叉树就是
                            完全二叉树。
                        
                森林
                    n个互不相交的树的集合


一般的二叉树要以数组的方式存储,要先转化成完全二叉树,因为如果你
只存有效节点(无论先序,中序,后序),则无法知道这个树的组成方式
是什么样子的。

                    
            树的存储(都是转化成二叉树来存储)
                二叉树的存储
                    连续存储【完全二叉树】
                        优点:
                            查找某个节点的父节点和子节点(也包括判断有咩有)速度很快
                        缺点:
                            耗用内存空间过大
                    
                    链式存储
                    
                一般树的存储
                    双亲表示法
                        求父节点方便
                    孩子表示法
                        求子节点方便
                    双亲孩子表示法
                        求父节点和子节点都很方便
                    二叉树表示法
                        把一个普通树转化成二叉树来存储
                        具体转换方法:
                            设法保证任意一个节点的
                                左指针域指向它的第一个孩子
                                有指针域指向它的下一个兄弟
                            只要能满足此条件,就可以把一个普通树转化成二叉树
                            一个普通树转化成的二叉树一定没有右子树
                        
                
                森林的存储
                    先把森林转化为二叉树,再存储二叉树,具体方式为:根节点
                    之间可以当成是兄弟来看待
                
            二叉树操作
                遍历
                      
                      先序遍历【先访问根节点】
                              先访问根节点
                              再先序访问左子树
                              再先序访问右子树
                      
                      中序遍历【中间访问根节点】
                              中序遍历左子树
                              再访问根节点
                              再中序遍历右子树
                              
                      后序遍历【最后访问根节点】
                              先后序遍历左子树
                              再后序遍历右子树
                              再访问根节点
                      
                  已知两种遍历序列求原始二叉树 
                          通过先序和中序 或者 中序和后续我们可以
                          还原出原始的二叉树
                          但是通过先序和后续是无法还原出原始的二叉树的
                          
                          换种说法:
                              只有通过先序和中序, 或通过中序和后序
                              我们才可以唯一的确定一个二叉树                  
                  
                应用
                    树是数据库中数据组织的一种重要形式(例如图书馆
                    的图书分类一层一层往下分。)
                    操作系统子父进程的关系本身就是一棵树
                    面向对象语言中类的继承关系本身就是一棵树
                    赫夫曼树(树的一个特例)
    
    
    图

模块三:查找和排序
        折半查找
        
        
        排序:
                冒泡
                插入
                选择
                快速排序
                归并排序
        
        排序和查找的关系
            排序是查找的前提
            排序是重点
                    
                
Java中容器和数据结构相关知识
    Iterator接口
    Map
        哈希表(与Java关系比较大)
        
再次讨论什么是数据结构:
    数据结构研究是数据结构的存储和数据的操作的一门学问
    数据的存储分为两部分:
                个体的存储
                个体关系的存储
                从某个角度而言,数据的存储最核心的就是个体关系
                的存储,个体的存储可以忽略不计。

再次讨论到底什么是泛型:
    同一种逻辑结构,无论该逻辑结构物理存储是什么样子的
    我们都可以对它执行相同的操作(例如都是线性结构或者
    用数组实现的树和用链表实现的树。利用重载技术。)

 

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

Jekyll 偏移代码片段高亮的初始行

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

从零开始配置vim(27)——代码片段

Wagtail - 在页面上呈现带有相关片段和标签的数据时遇到问题

LeetCode810. 黑板异或游戏/455. 分发饼干/剑指Offer 53 - I. 在排序数组中查找数字 I/53 - II. 0~n-1中缺失的数字/54. 二叉搜索树的第k大节点(代码片段