1. 树
树是一种层次性数据结构,其中第一层只有一个结点称根节点,根据节点的分支情况,结点可分为父节点与子节点,父节点可由多个子节点,但子节点只能有一个父节点。如果每个结点至多只能有两个子结点,则为常用的二叉树,如果有多于2个结点,加以其他限制条件,则可以构造B树或B+树等。
树是一种非常重要的数据结构,在STL中map的底层即使用红黑树实现。最常用的树即二叉查找树。关于树的各种概念也是树的各种操作的基础。
2. 满二叉树/完全二叉树
二叉树中根节点称第1层,易知第n层至多有2^(n-1)-1个结点。如果每一层节点都达到最大节点数,则称此树为满二叉树(Full Binary Tree)。如下:
如果前n-1层均达到最大数量,且最后一层第n层的结点都位于树的左侧,则称此树为完全二叉树(Complete Binary Tree)。具有n个结点的完全二叉树的深度为⌊log2n⌋,对于结点i其左孩子为2i+1,右孩子为2i+2。(从结点0开始)。
题目1:对于一个有800个结点的完全二叉树来说,他有多少个叶子结点?
一个K层满二叉树共有2^K-1个结点,故对完全二叉树来讲要求:2^K-1>=800;2^(k-1)-1<=800. K=10.故第K层有800-511=289个叶子结点,而在上一层中右边仍有若干叶子结点256 -(