首页 > 代码库 > 二叉树的基本概念

二叉树的基本概念

1、二叉树的递归定义

二叉树(BinaryTree)是n(n≥0)个结点的有限集,它或者是空集(n=0),或者由一个根结点及两棵互不相交的、分别称作这个根的左子树右子树的二叉树组成。二叉树指的是每个节点最多只能有两个子树(左子树和右子树)的有序树,子树有左右之分,次序不能颠倒。

 

二叉树不是树的特例

(1)二叉树与无序树不同

        二叉树中,每个结点最多只能有两棵子树,并且有左右之分。
        二叉树并非是树的特殊情形,它们是两种不同的数据结构。

(2)二叉树与度数为2的有序树不同

         在有序树中,虽然一个结点的孩子之间是有左右次序的,但是若该结点只有一个孩子,就无须区分其左右次序。而在二叉树中,即使是一个孩子也有左右之分。

 

2、二叉树的性质

  • 二叉树第i层上的结点数目最多为2i-1(i≥1)。
  • 深度为k的二叉树至多有2k-1个结点(k≥1)。
  • 在任意-棵二叉树中,若终端结点的个数为n0,度为2的结点数为n2,则no=n2+1。

    满二叉树(FullBinaryTree)

    一棵深度为k且有2k-1个结点的二又树称为满二叉树。

    满二叉树的特点:

    (1) 每一层上的结点数都达到最大值。即对给定的高度,它是具有最多结点数的二叉树。
    (2) 满二叉树中不存在度数为1的结点,每个分支结点均有两棵高度相同的子树,且树叶都在最下一层上。

    image

完全二叉树(Complete BinaryTree)


    若一棵二叉树至多只有最下面的两层上结点的度数可以小于2,并且最下一层上的结点都集中在该层最左边的若干位置上,则此二叉树称为完全二叉树。

完全二叉树的特点:
  (1) 满二叉树是完全二叉树,完全二叉树不一定是满二叉树。
  (2) 在满二叉树的最下一层上,从最右边开始连续删去若干结点后得到的二叉树仍然是一棵完全二叉树。
  (3) 在完全二叉树中,若某个结点没有左孩子,则它一定没有右孩子,即该结点必是叶结点。

  • 具有n个节点的完全二叉树的深度为log2n+1

3、二叉树的基本操作

  • 初始化:通常是一个构造器,用于创建一个空的树,或者以指定节点为根来创建二叉树。
  • 为指定节点添加子节点
  • 判断二叉树是否为空
  • 返回根节点
  • 返回指定节点的父节点
  • 返回指定节点的左节点(右节点)
  • 返回二叉树的深度
  • 返回指定节点的位置

4、二叉树的存储结构

顺序存储:采用数组来记录二叉树的所有节点

二叉链表存储:每个节点保留left、right域,分别指向其左、右子节点

三叉链表存储:每个节点保留left、right、parent域,分别指向其左、右子节点和父节点