二叉树

二叉树

1.1什么是树(Tree)?

树这种数据结构很像我们现实生活中的树,每个元素都是一个节点,用来连线的相邻节点的关系叫做父子节点。树是一种非线性数据结构。

树的节点有如下几个:

  • 根节点
  • 父节点
  • 子节点
  • 叶子节点
  • 兄弟节点

除此之外树还有三个相似的概念

  • 高度(Height)

  • 深度 (Depth)

  • 层(Level)

    高度:节点到叶子节点的最长距离。

    深度 :根节点到这个节点所经历的节点的个数。

    层: 节点的深度+1

1.2 二叉树

二叉树是我们最常用的树的数据结构,就是每个节点最多只能有两个字节点

__满二叉树 __

除了叶子节点每层都有左右两个字节点,这种树叫做满二叉树

完全二叉树

叶子节点在最底下两层,最后一层的叶子节点都靠左排列,并且除了最后一层,其他层的节点数都要达到最大,这种树叫完全二叉树

1.3二叉树的存储

二叉树的存储有两种存储的方法

  • 链式存储法(链表)

  • 顺序存储法(数组)

    链式存储法

    链式存储法就跟链表的操作基本一样,就是每个节点指向的是左右指针,而不是next指针了。大部分的

    树都是通过链式存储法实现的。

    顺讯存储法

    把根节点存储在数组下标为1的位置上,左右字节点做层级遍历,一次放入数组中,需要注意的是,每个字节点都会使对应数组位置的索引➕1,所以完全二叉树用数组存储基本不会浪费一点内存,仅仅浪费了一个索引为0的位置,非完全二叉树,会浪费比较多的存储空间。

    堆就是一种完全二叉树。

1.4二叉树的遍历

最经典的方法有三种,前序遍历、中序遍历、后序遍历。当然还有一种遍历方式层级遍历‘

  • 前序遍历。就是最先的遍历此节点。中左右
  • 中序遍历。 中间遍历此节点。左中右
  • 后序遍历。 最后遍历此节点。 左右中
  • 层级遍历。按层进行遍历。

实际上二叉树的遍历无论哪种方式都是一个递归的过程

写出递归公示的两大要素就是1.递归公式2.结束条件

前序遍历:
preOrder(n) = print(n) -> preOrder(n->left)-> preOrder(n->right)

中序遍历
inOrde(n) = inOrder(n->left)-> pring(n)->inOrder(n->right)

后序遍历
postOrder(n)=postOrder(n->left)->postOrder(n-right)->print(n)

二叉树遍历的时间复杂度

可以看出来无论是哪种遍历方式二叉树的时间复杂度都是与节点的个数有关系的,

所以可以推断出二叉树遍历的时间复杂度为O(n)。

总结

树:一种非线性的数据结构。

树的节点:根节点 叶子节点 父节点 字节点 兄弟节点

树的几个概念:高度 深度 层

最常用的树就是二叉树

两种特殊的二叉树:满二叉树,完全二叉树

二叉树的遍历方式:前中后层遍历。时间复杂度都是O(n).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值