结点的深度是从根结点开始自顶向下逐层累加的。
结点的高度是从叶节点开始自底向上逐层累加的。
树的高度(又称深度)是树中结点的最大层数。
树的一些重要性质:
1· 树中结点数等于所有结点的度数加1
2 为m的树中第i层至多有个结点
3 高度为h的m叉树至多有(-1)/(m-1)个结点
4 具有n个结点的m叉树的最小高度为logM(n(m-1))+1
二叉树与度为2的有序树的区别:
1 度为2的树至少有3个结点,而二叉树可以为空
2度为2的树有序树的孩子结点的左右次序是相对于另一孩子而言,而二叉树是确定的
几个特殊的二叉树
1 满二叉树:高度为h,含有-1个结点的二叉树
2 完全二叉树:高度为h,有n个结点的二叉树,每一个结点序号与满二叉树一一对应时,称之为完全二叉树(不一定满)
特点:
1 叶子结点只可能在层次最大的两层出现。对于最大层次中的叶子结点,都依次排列在该层的最左边位置上
2 如果有度为1的结点,只可能有一个,且该结点只有左孩子而无右孩子(重要特征)
3按层序排序后,一旦出现某结点(其编号为i)为叶子结点或只有左孩子,则编号大于i的结点均为叶子结点
4如n为奇数,则每个分支都有左右子女;如n为偶数,则编号最大的分支结点只有左子女
3二叉排序树:左子树上所有结点的关键字均小于根节点关键字,右子树所有关键字均大于根节点关键字
4平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1
二叉树的性质:(非常重要)
非空二叉树的叶子结点度数等于度为2的结点数加1,N0=N2+1
链式存储结构描述:
typedef struct btnode{
elemtype data;
struct btnode *lchild,*rchild;
}btnode,*btree;
含有n个结点的二叉链表中含有n+1个空链域
树和二叉树的转换规则:
每个结点左指针指向它的第一个孩子结点,右指针指向它在树中的相邻兄弟结点,可表示为“左孩子右兄弟”
由于根节点没有兄弟,所以由树转换而得的二叉树没有右子树