二叉树(一)--概述(附二叉搜索树实现)

树和图是典型的非线性数据结构树的定义:树是n(n>=0)个节点的有限集。当n=0时,成为空树。在任意一个非空树中,有如下特点:有且只有一个特定的节点成为根节点当n>1时,其余节点可分为m(m>0)个互不相干的有限集,每个集合本身也是一个树,并成为根的子树。树的最大层级数,称为树的高度或者深度二叉树的定义:二叉树的是指该树的每个节点最多有2个子节点,有可能时两个,也可能只有1个,或者是没有二叉树的两种特殊形式:满二叉树:一个二叉树的所有非叶子节点都存在左孩子和右孩子,
摘要由CSDN通过智能技术生成

树和图是典型的非线性数据结构

树的定义:
树是n(n>=0)个节点的有限集。当n=0时,成为空树。在任意一个非空树中,有如下特点:

  1. 有且只有一个特定的节点成为根节点
  2. 当n>1时,其余节点可分为m(m>0)个互不相干的有限集,每个集合本身也是一个树,并成为根的子树。
树的最大层级数,称为树的高度或者深度

二叉树的定义:
二叉树的是指该树的每个节点最多有2个子节点,有可能时两个,也可能只有1个,或者是没有

二叉树的两种特殊形式:

满二叉树:一个二叉树的所有非叶子节点都存在左孩子和右孩子,并且所有叶子节点都在同一层级上,这个树就是满二叉树
完全二叉树:一个二叉树的`最后一个节点之前`所有非叶子节点都存在左孩子和右孩子,并且所有叶子节点都在同一层级上

二叉树的物理存储结构

1.链式存储结构

采用链表的存储结构,二叉树的每一个节点包含3个部分

  • 存储数据的data变量
  • 指向左孩子的left指针
  • 指向右孩子的right指针

2.数组

使用数组存储时,会按照层级顺序把二叉树的节点放到数组中对应的位置上。如果某一个节点的左孩子或者右孩子空缺,则数组的相应位置也空出来

为什么这么设计呢?因为这样可以方便地在数组中定位二叉树的孩子节点和父节点

假设一个父节点的下标是parent,那么它的左孩子节点的下标就是2parent+1,右孩子节点的下标就是2parent+2。

反过来。假设一个左孩子节点的下标是leftchild,那么它的父节点下标就是(leftchild-1)/2

显然,对于一个稀疏的二叉树来说,用数组表示法是非常浪费空间的。
然而因为完全二叉树的特殊性,用数组来存储是非常合适的,比如二叉堆,一种特殊的完全二叉树

二叉树的应用

二叉树有很多种的形式,除一般二叉树外,由上面提到的满二叉树,完全二叉树,还有二叉堆等等

那么这么多种的二叉树有哪些作用呢?

  1. 用于查找操作
  2. 维持元素间的相对顺序

二叉查找树

又名二叉排序树,二叉搜索树等等。顾名思义,这种二叉树的元素间有一定的顺序,且方便查找

定义:

  1. 如果左子树不为空,则左子树上所有节点的值均小于根节点的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值