数据结构 -- 树

什么是树?有根树?

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

树的几个名词:

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

      双亲,孩子,兄弟

      度,叶子,树的度

      节点的层次,树的高度

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


 二叉树

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

    二叉树的第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访问结点, 后序遍历二叉树。
}

  二叉树的存储表示 :

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

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

     

 

posted @ 2014-03-31 10:13  Rrouned  阅读(417)  评论(0编辑  收藏  举报