「这是我参与2022首次更文挑战的第23天,活动详情查看:2022首次更文挑战」。
二叉树的特点
- 每个节点最多只有两颗子树,所以二叉树的结点的度最大为2,所以就叫二叉树。
- 左子树和右子树是有顺序的,次序不能颠倒。即使某个结点只有一颗子树,也是要区分它是左子树还是右子树。
特殊的二叉树
斜树
所以的结点只有左子树的二叉树称为左斜树,同理所以的结点只有右子树的二叉树称为右斜树。
满二叉树
所有分支节点都存在左子树和右子树,并且所有叶子都在同一层,我们其称为满二叉树。 满二叉树是比较特殊的一种。
叶子只能出现在最下一层。
非叶子结点度为2.
同样深度的二叉树,满二叉树结点个数最多,叶子数最多。
完全二叉树
就是一种特殊的满二叉树,完全二叉树不要求所有叶子结点都在同一层,分支节点可以只有一个子树。 标准特点
叶子节点只能出现在最下两层。
最下层的叶子一定集中在左边连续位置。
倒数二层有叶子结点,一定在右边连续位置。
结点度为1时,该结点只有左子树,不存在只有右子树的情况。
同样结点树的二叉树,完全二叉树的深度最小。
二叉树性质(重点)
在二叉树的第i层上之多有2的i-1次方个结点。
深度为k的二叉树之多有2的k次方-1个结点。
对任何一颗二叉树,假设其终端结点数为n0,度为2的结点数为n2,则n0=n2+1.
具有n个结点的完全二叉树的深度为log以2为底的n的绝对值+1.
二叉链表
二叉树每个节点最多有两个孩子,所以为其设计一个数据域和两个指针域。
typedef struct BiTNode
{
TElemTYpe data;//节点数据
struct BiTNode *lchild, *rchild;//左右孩子指针
}BiTNode ,*BiTree;
二叉树的遍历
从根节点出发,按某种顺序,依次访问所有结点,使每个节点被访问一次。 二叉树遍历方法主要有4种。
前序遍历:若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再右子树。
中序遍历:若二叉树为空,则空操作返回,否则从根节点开始,先遍历根节点的左子树,再根,再右子树。
后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子后节点的方式遍历访问左右子树,最后是访问根节点。
层序遍历:若二叉树为空,则空操作返回,否则先从树的第一层(根节点开始),从上而下逐层遍历,同一层中从左到右逐个访问。