树的介绍1

树和二叉树

  • 树和图都是典型的非线性结构
  • 定义:

    树是n节点的有限集。树是n(n=>0)个节点的有限集。 n=0时成为空树。在任意一颗非空树中:
    (1)有且仅有一个称为根的节点;
    (2)当n>0时,其余节点可分为m(m>0)个互不相交的有限集T1、T2、T3、Tm,其中每个节点又是一棵树,并且称为根的子树。

  • 叶子节点(leaf): 没有孩子的节点
  • 遍历

二叉树( binary tree)

  • 定义:

    二叉树(binary tree)是树的一种特殊形式.二叉,顾名思义,这种树的每个节点最多有两个孩子节点.注意,这里是最多有2个,也有可能只有一个,或者没有.

  • 存储形式
    • 链式结构
      在这里插入图片描述

    • 数组
      在这里插入图片描述

      • 数组存储的特性:
        • 如果父节点的下标是parent,那么他左孩子节点的下标就是2parent+1, 右孩子节点的下标就是2parent+2
        • 对于稀疏的二叉树来说,用数组表示比较浪费空间
        • 什么样的树用数组来表示比较合适: 二叉堆
满二叉树(也叫完美二叉树:perfect binary tree)
  • 定义:

    一个二叉树的所有非叶子节点都有2个孩子,并且所有的叶子节点都在同一层

  • 图形
    在这里插入图片描述
完全二叉树(complete binary tree)
  • 定义:

    对于一个有n个节点的二叉树,按层级顺序编号,则所有的节点编号为1到n,如果这个树所有节点和同样深度的满二叉树的编号从1到n的节点位置相同,则这个二叉树为完全二叉树
    另一种定义方式: 只有最底层的节点未被填满,且最底层节点尽量靠左填充。

  • 图形:
    在这里插入图片描述

  • 面试题:

完满二叉树( full binary tree)

除了叶节点之外,其余所有节点都有两个子节点

二叉搜索树(binary search tree)
  • 也叫 二叉排序树
  • 定义:

    在二叉树的基础上增加了几个条件:
    1.若任意结点的左子树不空,则左子树上所有结点的值均不大于它的根结点的值。
    2. 若任意结点的右子树不空,则右子树上所有结点的值均不小于它的根结点的值。
    3.任意结点的左、右子树也分别为二叉搜索树。

  • 作用: 方便查找
  • 图形:
    在这里插入图片描述
  • 算法时间复杂度
    • 对于一个节点分布相对均衡的二叉查找树来说,如果节点总数是n,那么搜索节点的时间复杂度就是O(lgn),和树的深度是一样的
    • 如果分布不均衡那么搜索节点的时间复杂度就是O(n),如下图
      在这里插入图片描述
二叉堆
优先队列
  • 特定: 不再遵循队列的先进先出(FIFO),而是分两种情况:
    • 最大优先队列: 无论入队的顺序如何,都是当前最大的元素优先出队
      • 实现: 最大堆
    • 最小优先队列: 无论入队的顺序如何,都是当前最小的元素优先出队
      • 实现: 最小堆
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值