数据结构之树

树:

定义:
专业定义:
                   1.有且只有一个称为根的节点
                    2.有若干个互不相交的子树,这些子树本身也是一颗树
通俗定义:
                   1.树是由节点和边组成
                    2.每个节点只有一个父节点但可以有多个子节点
                    3.但又一个节点例外,该节点没有父节点,此节点称为根节点
专业术语:
              节点     父节点       子节点
              子孙     堂兄弟       
              深度:从根节点到最底层节点的层数称之为深度,根节点是第一层
              叶子节点:没有子节点的节点
              非终端节点:实际就是非叶子
              度:子节点的个数称为度
分类:
一般树:任意一个节点的子节点的个数都不受限制
二叉树:任意一个节点的子节点个数最多两个,且子节点的位置不可更改
    分类:
           一般二叉树
            满二叉树:在不增加树的层数的前提下,无法再多添加一个节点的二叉树就是满二叉树
            完全二叉树:如果只是删除满二叉树最底层最右边的连续若干个节点,这样形成的二叉树就是完全二叉树
森林:n个互不相交的树的集合
树的存储
二叉树的存储
连续存储【完全二叉树】
  优点:查找某个节点的父节点和子节点(也包括判断有没有子节点)速度很快
  缺点:耗用内存空间过大
链式存储
一般树的存储
  双亲表示法:
        求父节点方便
  孩子表示法:
        求子节点方便
  双亲孩子表示法:
        求父节点和子节点都很方便
  二叉树表示法:(孩子兄弟表示法)
        把一个普通树转化成二叉树来存储
      具体转换方法:
          设法保证任意一个节点的
              左指针域指向它的第一个孩子
              右指针域指向它的下一个兄弟节点
          只要能满足词条件,就可以把一个普通树转化为二叉树
森林的存储
  先把森林转化为二叉树,再存储二叉树

 

操作:(通常指二叉树的操作)
遍历:
  先序遍历:(根左右)
    先访问根节点,再先序访问左子树,再先序访问右子树
  中序遍历:(左根右)
    中序遍历左子树,再访问根节点,再中序遍历右子树
  后序遍历:(左右根)
                后序遍历左子树,再后序遍历右子树,再访问根节点
已知两种遍历序列求原始二叉树:
  通过先序和中序 或者 中序和后序我们可以还原出原始的二叉树
  但是通过先序和后序是无法还原出原始的二叉树的
 
  换种说法:
  只有通过先序和中序或通过中序和后序,我们才可以唯一的确定一个二叉树
树的应用:
  树是数据库中数据组织的一种重要形式
  操作系统子父进程的关系本身就是一棵树
  面向对象语言中类的继承关系本身就是一棵树
  赫夫曼树
 
 
 
posted @ 2018-03-26 19:19  骑猪少年  阅读(255)  评论(0编辑  收藏  举报