数据结构 -- 树
树
什么是树?有根树?
用序偶、集合的概念如何定义树
树的几个名词:
根,子树,结点,边,路径
双亲,孩子,兄弟
度,叶子,树的度
节点的层次,树的高度
无序树,有序树,森林,果园或称有序森林
二叉树
我的理解:最多两个分叉的树
二叉树的第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,0i<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访问结点, 后序遍历二叉树。 }
二叉树的存储表示 :
完全二叉树的顺序表示 (从上到下,从左到右)
二叉树的链接表示(二叉链表)