一、树的概念学习
树是n个节点构成的有限集合。当n=0时,称为空树。若n>0,每个树都有一个根节点。
1、树的子树是不相交的。
2、除了根节点外,每一个节点有且仅有一个父节点。
3、一棵n个节点的树有n-1条边。
树的常用术语:
1、节点的度(Degree): 节点的子树个数。
2、树的度:树的所有节点中最大的度数。
3、叶节点(Leaf):度为0的节点。
4、父节点(Parent):有子树的节点是其子树的根节点的父节点。
5、子节点(Child):也称孩子节点。
6、兄弟节点(sibling):两个节点具有相同的父节点。
7、路径和路径长度:从父结点到某个子节点的路径,用边相连。路径所包含边的个数为路径长度。
8、节点的层次(Level) :规定根节点在一层,其他任一节点的层数是其父节点的层数加一。
9、树的深度(Depth):树中所有节点中的最大层次是这棵树的深度。
二、二叉树(Binary Tree)
一个有穷节点的集合。若不为空,则它是由根节点和称为其左子树和右子树的两个不相交的二叉树构成。每个节点最多拥有两个子节点,左子树和右子树是有顺序的不能任意颠倒。
1、完美二叉树
一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树。
2、完全二叉树
完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。
3、满二叉树
所有非叶子结点的度都是2。
三、二叉树的重要概念
1、一个二叉树的第i层的最大结点数为:2的i-1次方,i>=1。
2、深度为k的二叉树最大结点总数为:2的k次方 - 1,i>=1。
3、对于任何非空二叉树,n0表示叶结点的个数,n2表示度为2的非叶结点个数,则一定满足:n0 = n2 + 1。
4、所有结点个数n = n0+n1+n2。
四、二叉树的存储方式
1、顺序存储(用数组表示)
2、链表存储(节省空间)
五、二叉树的遍历()
1、先序遍历
(1)先访问根结点,再先序遍历左子树,最后遍历右子树。
先序遍历结果:ABDFECGHI
//前序遍历
void preOrder(int r)
{
if