树2

132 阅读3分钟

「这是我参与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种。

前序遍历:若二叉树为空,则空操作返回,否则先访问根节点,然后前序遍历左子树,再右子树。
中序遍历:若二叉树为空,则空操作返回,否则从根节点开始,先遍历根节点的左子树,再根,再右子树。
后序遍历:若二叉树为空,则空操作返回,否则从左到右先叶子后节点的方式遍历访问左右子树,最后是访问根节点。
层序遍历:若二叉树为空,则空操作返回,否则先从树的第一层(根节点开始),从上而下逐层遍历,同一层中从左到右逐个访问。