如果树中每个节点最多只能有两个子节点,这样的树就成为”二叉树”
二叉树的重要性,不仅仅是因为简单,也因为 几乎上所有的树都可以表示成二叉树的形式
二叉树的定义
二叉树可以为空,也就是没有节点
若不为空,则它是由根节点和称为其左子树TL和右子树TR的两个不相交的二叉树组成
二叉树的特性
一个二叉树第i层的最大节点数为:2^(i-1), i>=1;
深度为k的二叉树由最大节点总数位: 2^k - 1, k>=1
对任何非空二叉树T,若n0表示叶节点的个数、n2是度为2的非叶节点个数,那么两者满足关系n0=n2+1
二叉树的节点个数假设为n,那么一共有n - 1条边(每两个节点一条边)=>可得到等式n0 + n1 + n2(n0是节点为0的个数,n1是节点为1的个数,n2是节点为2的个数) = 边的个数 = n1 + 2n2 + 1 ==>n0 = n2 + 1
完美二叉树
完美二叉树(Perfect Binary Tree
),也成为满二叉树(Full Binary Tree
)
在二叉树中,除了最下一层的叶节点外,每层节点都有两个子节点,就构成了满二叉树
完全二叉树
完全二叉树(Complete Binary Tree
)
除二叉树最后一层为,其他各层都达到最大个数
且最后一次从左向右的叶节点连续存在,值缺右侧若干节点
完美二叉树是特殊的完全二叉树
二叉树的存储常见的的方式是数组和链表
使用数组:
完全二叉树:按从上至下,从左只有顺序存储
非完全二叉树:非完全二叉树要转成完成才能按照上面的方案存储(使用数组),但是会造成很大的空间浪费
二叉树最常见的方式还是使用链表存储
每个节点封装成一个Node,Node中包含存储的数据,左节点的引用,右节点的引用