树的学习
来源:互联网 发布:网络借贷资金存管指引 编辑:程序博客网 时间:2024/05/10 15:04
树的定义
树(tree)是n(n>=0)个结点的有限集合T,T为空时称为空树,否则它满足如下两个条件:
(1)有且仅有一个称之为根(root)的结点
(2)其余的结点可分为m(m>=0)个互不相交的子集T1,T2,....,Tm,其中每个子集本身又是一棵树,并称之为根的子树(subtree)
注意:
树的递归定义刻画了树的固有特性:一棵非空树若是由若干棵子树构成的,而子树又可以由若干棵更小的树组成
树结构的基本术语
结点的度(degree)
孩子(child)和双亲(parents)
祖先(ancestor)和子孙(descendent)
路径
祖先和子孙
结点的层数(level)和树的高度(height)
有序树(orderedtree)和无序树(unorderedtree)
森林(forest)
二叉树
二叉树定义
二叉树的重要性质
(1)在二叉树的第i层上至多有2的(i-1)次方个结点
(2)深度为k的二叉树至多有2的(k)次方-1个结点 (等比数列可证)
(3)对任何一棵二叉树T,若终端结点数为n0,度为2的结点数为n2,则n0 = n2 + 1
n = n1 + n2 + n0n = 1 * n1 + 2 * n2 + 1
相同项相消即可
(4)具有n个结点的完全二叉树的深度为log2 n + 1
二叉树的存储结构
顺序存储结构
完全二叉树的结点编号
编号方法
在一棵n个结点的完全二叉树中,从树根起,自上层到下层,每层从左向右,给所有的结点编号,能得到一个反映整个二叉树结构的线性序列。
编号特点
完全二叉树除最下面一层外,各层都充满了结点。每一层的结点个数恰好是上一层结点个数的2倍。从一个结点的编号九可以推的其双亲,左、右孩子,兄弟等结点的编号。假设编号为i的结点是ki(1 <= i <= n),则有
(1)若i > 1,则ki的双亲编号为 i / 2下整数。若i == 1,则ki是根结点,无双亲
(2)若2i <= n,则ki的左孩子的编号是2i;否则,ki无左孩子,则ki必是叶子。因此完全二叉树编号i > n / 2的结点必是叶子结点。
(3)若2i + 1 <= n,则ki的右孩子编号是2i + 1;否则,ki无右孩子
(4)若i为奇数且不为1,则ki的左兄弟的编号是i - 1,否则, ki无左兄弟
(5)若i为偶数且小于n,则ki的右兄弟是i + 1,否则,ki无右兄弟
完全二叉树的顺序存储
define MAX_TREE_SIZE 1000//二叉树的最大结点数int sqbitree[MAX_TREE_SIZE];//0号单元存储数量,1号单元开始存储结点
优点和缺点:
链式存储结构
结点的结构
结点的类型说明
typedef char DataType;struct BinTNode{DataType data;struct BinTNode *lchild, *rchild;//左右孩子指针};typedef struct BinTNode *BinTree;//BinTree为指向BinTNode类型结点的指针类型
- 树的学习笔记。
- 树的学习
- 二叉树的学习
- 树的学习
- DOM树的学习
- Dwr树的学习
- 树的初步学习
- 树的学习
- 线段树的学习
- 二叉树的学习
- 后缀树的学习
- Trie树的学习
- 二叉树的学习
- 数据结构之树的学习
- 线段树的学习记录
- 二叉树的相关学习
- Trie(字典树)的学习
- 树的直径学习总结
- 调试技术: Linux core dump file
- jsp开发中中文传值加密解密
- 希捷2T 2碟 硬盘 U盘 ghost 安装 深度win7 64位系统
- UILabel自动换行的两种实现
- 实现分页效果与图片覆盖
- 树的学习
- C角度(一)——任何C程序,可理解为指针指向某一个字符,然后字符匹配
- 第2帖:LED 发光二极管
- Android 组件复用和进程关系
- 数据同步的一次经历
- smarty模板
- 博士后和民工的区别
- 搭建自己的个人网站
- 大奖赛计分