参考本文http://blog.51cto.com/9291927/2068745
1、树的简介
树是一种非线性的数据结构,是由n(n >=0)个结点组成的有限集合。
如果n==0,树为空树。
如果n>0,
树有一个特定的结点,根结点
根结点只有直接后继,没有直接前驱。
除根结点以外的其他结点划分为m(m>=0)个互不相交的有限集合,T0,T1,T2,...,Tm-1,每个结合是一棵树,称为根结点的子树。
树的示例如下:
2、树的度
树的结点包含一个数据和多个指向子树的分支
结点拥有的子树的数量为结点的度,度为0的结点是叶结点,度不为0的结点为分支结点,树的度定义为树的所有结点中度的最大值。
3、树中结点的层次
树中根结点为第1层,根结点的孩子为第2层,依次类推。
树中结点的最大层次称为树的深度或高度
4、二叉树
a.二叉树的性质
性质1:二叉树第i层上的结点数目最多为 2{i-1} (i≥1)。
性质2:深度为k的二叉树至多有2{k}-1个结点(k≥1)。
性质3:包含n个结点的二叉树的高度至少为log2 (n+1)。
性质4:在任意一棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则n0=n2+1。
b.满二叉树
特点:每层都充满了节点
c.完全二叉树
特点:k-1层与满二叉树完全相同,第k层节点尽力靠左。
首先创建树节点,因为树可能有左子点,右子点,所有在树节点中要包含这两个结构。
//创造节点数数据,将节点相连接
树的遍历
树的遍历分为三种:
a.DLR——先序遍历,既先根在左在右。
b.LDR——中序遍历,既先左在根在右。
c.LRD——后序遍历,既先左在右在根。
下图为先序遍历,调整输出位置,可实现LDR.LRD
计算叶节点的数目