zoukankan      html  css  js  c++  java
  • 数据结构 -- 树

    什么是树?有根树?

      用序偶、集合的概念如何定义树

    树的几个名词:

          根,子树,结点,边,路径

          双亲,孩子,兄弟

          度,叶子,树的度

          节点的层次,树的高度

          无序树,有序树,森林,果园或称有序森林


     二叉树

        我的理解:最多两个分叉的树

        二叉树的第i(i>=1)层上至多有2^(i-1)个结点。

        高度为h的二叉树上至多有2^(h–1)个结点。

        包含n个元素的二叉树的高度至少为log2 (n+1)再向上取整

        任意一棵二叉树中,若叶结点的个数为n0,度为2的结点的个数为n2,则必有n0=n2+1。

        满二叉树 完全二叉树 扩充二叉树

        具有n个结点的完全二叉树的高度:log2 (n+1)向上取整

        假定对一棵有n个结点的完全二叉树中的结点,按从上到下、从左到右的顺序,从0到n-1编号,设树中某个结点的序号为i,0i<n ,则有以下关系成立: (1)     当i=0时,该结点为二叉树的根; (2) 若i>0,则该结点的双亲的序号为(i-1)/2向下取整;

    //抽象数据类型
    ADT BTree {
    数据:
      二叉树是结点的有限集合,它或者为空集合,或  者由一个根结点和两棵互不相交的左、右子二叉树组成。
    运算: 
          Create(); // 构造一棵空二叉树。
          Destroy();//撤消一棵二叉树。
          IsEmpty()://若二叉树为空,则返回true,否则返回false。
          Clear()://移去所有结点,成为空二叉树。
          Root(x): //若二叉树非空,则x有根的值,并返回true,否则返回false。
          MakeTree(x, left, right):// 构造一棵二叉树:根的值为x,以left和right为左右子树。
          BreakTree(x, left, right)://拆分二叉树为三部分:x为根的值,left和right分别为原树的左、右子树
          PreOrder(Visit)://使用函数Visit访问结点, 先序遍历二叉树。
          InOrder(Visit)://使用函数Visit访问结点, 中序遍历二叉树。
          PostOrder(Visit)://使用函数Visit访问结点, 后序遍历二叉树。
    }

      二叉树的存储表示 :

                完全二叉树的顺序表示 (从上到下,从左到右)

                二叉树的链接表示(二叉链表)

         
  • 相关阅读:
    [转载]为 Windows 下的 PHP 安装 PEAR 和 PHPUnit
    作品和案例
    js创建对象的最佳实践
    log4j的PatternLayout参数含义
    Java线程池——ThreadPoolExecutor的使用
    登录mysql 报 Access denied for user 'root'@'localhost' 错误
    CentOS 7下使用yum安装MySQL5.7
    linux下MySQL停止和重启
    Linux 命令 -- chown
    Linux 命令 -- chmod
  • 原文地址:https://www.cnblogs.com/Rrouned/p/3635152.html
Copyright © 2011-2022 走看看