1.二叉树的种类

题目类型主要分为满二叉树完全二叉树

1.1 满二叉树

满二叉树:如果一棵二叉树只有度为0(没有子节点的结点,也称为叶子结点)的结点和度为2 (左子节点和右子节点)的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。

深度为k,有2^k-1个节点的二叉树。 (如图所示,有 2^4 - 1 = 15 个节点)

1.2 完全二叉树

完全二叉树是指除最后一层外,其余各层节点数均达到最大值(即每层节点数为 2^(i−1),i 为层数),且最后一层的节点全部集中在该层最左边的连续位置。若最底层为第 h 层,则该层节点数满足 1≤节点数≤2^(h−1)

1.3.二叉搜索树

满二叉树和完全二叉树是没有数值的,但是二叉搜索数存在数值,并且是一个有序的树

  • 特点:

    • 左子树不为空,则左子树上所有结点的值都小于根节点的值

    • 右子树不为空,则右子树上所有结点的值都大于根节点的值

    • 左右子树也分别为二叉排序树

1.4.平衡二叉搜索树 AVL(Adelson-Velsky and Landis)

性质:它是一棵空树或它的左右两个子树高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

如图所示,第一棵树高度差为:左 2 - 右 1 = 1,第二颗树:左 2 - 右 2 = 0 ,第三棵数:左 2 - 右 0 = 2> 1

2.二叉树的存储方式

链式存储(指针)顺序存储(数组)

链式存储如图:

顺序存储:

顺序存储中,如果父节点的数组下标是 i,那么它的左孩子就是 i*2 + 1,右孩子就是 i *2 + 2。

3.二叉树的遍历方式

3.1 深度优先遍历(递归)

前序遍历(递归法,迭代法)

中序遍历(递归法,迭代法)

后序遍历(递归法,迭代法)

3.2 广度优先遍历

层次遍历(迭代法)

4.二叉树的定义(Python)


class TreeNode:
    def __init__(self, x):
        self.val = x      # 节点存储的值
        self.left = None  # 左子节点,默认为 None
        self.right = None # 右子节点,默认为 None