树
树是一种数据结构,它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
它具有以下的特点:
每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。
树的有关概念
- 节点的度:一个节点含有的子树的个数称为该节点的度;如上图: A的为3
- 叶节点或终端节点:度为0的节点称为叶节点:如上图: K,L,F,G等节点为叶节点
- 非终端节点或分支节点:度不为0的节点;如上图: B,C,D等节点为分支节点
- 双亲节点或父节点:若一个节点含有子 节点,则这个节点称为其子节点的父节点;如上图: A是B,C,D的父节点
- 孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点;如上图: B, C,D是都是A的孩子节点
- 兄弟节点:具有相同父节点的节点互称为兄弟节点;如上图: B. C是兄弟节点
树的度: 一棵树中,最大的节点的度称为树的度;如上图:树的度为6 - 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
- 树的高度或深度:树中节点的最大层次; 如上图:树的高度为4
- 节点的祖先:从根到该节点所经分支上的所有节点;如上图: A是所有节点的祖先
- 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。 如上图:所有节点都是A的子孙
- 森林:由m (m>0) 棵互不相交的多颗树的集合称为森林
二叉树
二叉树就是所有节点的度都<=2的树
如下图
二叉树的性质
1.若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个结点
2.若规定根节点的层数为1,则深(高)度为h的二叉树的最大结点数是2h-1
证:
最大节点数=每一层最大节点数之和
根据性质1:
第一层最大节点个数为2(1-1)
第二层最大节点个数为2(2-1)
第三层最大节点个数为2(3-1)
……
第h层最大节点个数为2(h-1)
最大节点个数=2(1-1)+ 2(2-1)+2(3-1)+……+2(h-1)=2h-1
3.对任何一棵二叉树,如果度为0其叶结点个数为n0,度为2的分支结点个数为n2则有n0=n2+ 1
满二叉树和完全二叉树
-
满二叉树:一个二叉树,如果每一个层的结点数都达到最大值(每一个节点的度都是二),则这个二叉树就是满二叉树。
也就是说,如果一个二叉树的层数为K,且结点总数是(2^k)-1 ,则它就是满二叉树。 -
完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。
对于深度为h的,有n个结点的二叉树,当h-1层都是满的(前h-1层的节点的度都为2),最后一层不满但是节点从左到右是连续的
满二叉树和完全二叉树的高度
满二叉树的高度=log2 N
(N为总节点个数)
证:
因为高度为h的二叉树的最大结点数是2h-1
设节点的总个数为N
则N=2h-1->h=log2(N+1),可以近似为log2 N
完全二叉树的高度为log2N-1~log2N之间
完全二叉树的最后一层最少有一个节点,此时完全二叉树的总节点数为2(h-1)
则N=2(h-1)->h=log2N-1,可以近似为log2 N
完全二叉树的最后一层最多是为满二叉树,此时完全二叉树高度为log2N