树形结构也是由结点(结构中的逻辑单元,可用于保存数据)和结点之间的连接关系(一种后继关系)构成。
二叉树是结点的结点的有穷集合。这个集合或者是空集,或者其中有一个称为根节点的特殊结点,其余结点分属两颗不相交的二叉树,这两颗二叉树分别是原二叉树(或者说原二叉树的根节点)的左子树和右子树。 二叉树也是一种递归结构。 不包含任何结点的二叉树称为空树;只包含一个结点的二叉树是一颗单点树。 子节点和父节点的概念是相对的。 可认为从父节点到子节点有一条连线,称为从父节点到子节点的边。这种变有方向,形成一种单方向的父节点/子节点关系。父节点相同的两个结点互为兄弟结点 在二叉树里有些结点的两颗子树都为空,没有子节点。这种结点称为树叶(结点)。 树中其余结点称为分支结点。 分支结点可以只有一个分支。 **一个结点子节点的个数称为该结点的度数。**树叶结点的度数为0,分支结点的度数可以为1或者2. 一个二叉树有可能的五种形态:
从一个祖先结点到其任何子孙结点都存在一系列边,形成从前者到后者的联系。这样的一系列收尾相连的边称为树中的一条路径,路径中边的条数称为该路径的长度。 从一颗二叉树的根节点到该树中的任一结点都有路径,而且路径唯一。 规定二叉树根的层数为0,对位于K层的结点,其子节点是K+1层的元素,如此下去,二叉树的所有结点可以按这种关系分为一层层的元素。 一颗二叉树的高度(深度)是树中结点的最大层数(也就是这颗树里的最长路径的长度)
性质1:在非空二叉树第i层中至多有2^i个结点(i>=0) (上面2^i 表示数学上:2的i 次方,以后也是同理) 性质2:高度为h的二叉树,至多有 2^h-1 个结点 性质3:对于任何非空二叉树T,如果其叶节点的个数为N₁ 度数为2的结点个数为N₂ 那么N₁ = N₂ + 1
满二叉树: 如果二叉树中所有分支结点的度数都为2,则称它为一个满二叉树。满二叉树是一般二叉树的一个子集。 (一个结点有分支结点,说明它不是夜结点) 下图两个二叉树都是满二叉树,右边的属于特例,每一层都满,在同样高度的二叉树中结点个数达到上限 性质4:满二叉树里的叶节点比分支结点多一个 扩充二叉树: 对二叉树T, 加入足够多的新叶节点,使T 原有的结点都变为度数为2的分支结点,得到的二叉树称为T的扩充二叉树。 扩充二叉树中新增的结点称其为外部结点, 原树T的结点称其为内部结点 空树的扩充二叉树规定为空树。 从形态上看,任何二叉树的扩充二叉树都是满二叉树。根据性质4, 扩充二叉树的外部结点个数比内部结点的个数多1 性质5:扩充二叉树的外部路径长度E,是从树根到树中各外部结点的路径长度之和。内部路径长度I 是从树根到树中各内部结点的路径之和。 如果该树有n 个内部结点,那么: E = I + 2*n
对于一颗高度为h 的二叉树,如果第0层至第h-1层的结点都满(也就是说, 对所有0<= i <= h-1, 第i 层有2^i 个结点),如果最下一层的结点不满,则所有结点在最左边连续排列,所有空位都在右边。 这样的一颗二叉树称为完全二叉树。 可以看出,在完全二叉树里,除最下两层外,其余层数都是度数为2的分支结点; 而且除了最下最右的分支结点度数可能为1外,其余分支结点的度数均为2. 性质6:n个结点的完全二叉树高度h=﹤log₂n﹥, 即为不大于log₂n的最大整数
