zoukankan      html  css  js  c++  java
  • 树结构

    一、 树

    1. 树的定义

      树结构是一种非常重要的非线性结构,该结构中的一个数据元素可以有两个或两个以上的直接后继元素;它是n(n>=0)个结点的有限集合,当n=0时称为空树。在任意飞空树中有且仅有一个称为根的结点;

      树的基本概念

      a. 双亲、孩子和兄弟。结点的子树的根称为该结点的孩子,该结点称为其子结点的双亲(parent)。具有相同双亲的结点互为兄弟。

      b. 结点的度。一个结点的子树的个数即为该结点的度。度数最大的结点的度称为树的度。

      c. 叶子节点。度为0的节点,也称终端结点。

      d. 内部结点。度不为0的节点(包括根节点),也称分支结点或非终端结点。除根节点以外,分值结点也称为内部结点。

      e. 结点的层次。根为第一层,根的孩子为第二层,依此类推。

      f. 树的高度。一棵树的最大层数记为树的高度(或深度)。

      g. 有序(无序)树。若将树中结点的各子树看成是从左到右具有次序的,即不能交换,则称为改树为有序树,否则称为无序树。

    树的遍历:

    前序遍历:125673489(10)  后序遍历:567239(10)841  层次排列:123456789(10)前序遍历:125673489(10)

    后序遍历:567239(10)841

    层次排列:123456789(10)

     

    2. 二叉树的定义

      二叉树是n(n>=0)个结点的有限集合,它或者是空树(n=0),或者是由一个根节点及两棵不相交的且分别称为左、右子树的二叉树所组成。

    二叉树和树是两个完全不同的概念,二叉树并不是特殊的树,树和二叉树的区别如下:

      a. 二叉树中结点的子树要区分左子树和右子树,即使在结点只有一颗子树的情况下,也要明确指出该子树是左子树还是右子树。

      b. 二叉树结点最大度为2,而树中不限制结点的度数。

      

      二叉树的性质:

      a. 二叉树第i层(i>=1)上最多有2i-1个结点。

      b. 高度为k的二叉树最多有2k-1个结点(k>=1)。

      c. 对于任何一颗二叉树,若其终端节点数为n0,度为2的结点数为n2,则n0=n2+1。

      d. 具有n个结点的完全二叉树的深度为⌊log2n⌋+1(“⌊⌋”表示向下取整)

      e. 对一棵有n个结点的完全二叉树的所有结点按层次自上而下、自左至右进行编号,则对于在任一结点i(1<=i<=n)有:

        ① 若i=1,则结点i是二叉树的根,无双亲;若i>1,则其双亲为⌊i/2⌋。

        ② 若2i>n,则结点i没有左孩子,否则其左孩子为2i。

        ③ 若2i+1>n,则结点i没有右孩子,否则其右孩子为2i+1。

      满二叉树、完全二叉树、非完全二叉树:

     二叉树的遍历:

    前序遍历:12457236        

    中序遍历:42785136

    后序遍历:48752631

    层次遍历:12345678

      所谓的前、中、后指的是根节点的访问顺序。中序遍历中根节点左边的都是它的左子树结点,右边都是右子树结点;同样,将2看做左子树的根节点的时候,2左边的都是它的左子树结点,右边的也都是它的右子树结点,依此类推。

    3. 二叉树和树的转换

      请移步:树转换为二叉树小技巧

  • 相关阅读:
    【分享】管理的最高境界是简单
    建立市场化风险评估机制推进地方政府信用评级建设
    手游-神雕侠侣 85侠客纪攻略(已通关)
    使用git的分支功能实现定制功能摘取与组合的想法
    组内正则培训记录
    组内Linq培训记录
    一次代码重构记录
    git代码库误操作还原记录
    关于代码重构的开始
    如何管理高手、大牛?
  • 原文地址:https://www.cnblogs.com/ImaY/p/4276498.html
Copyright © 2011-2022 走看看