前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据结构与算法-二叉树(一)

数据结构与算法-二叉树(一)

作者头像
用户3470542
发布2019-06-26 17:05:15
5060
发布2019-06-26 17:05:15
举报
文章被收录于专栏:算法半岛算法半岛

二叉树的理解

在理解树的基本概念和结构后接下来我们学习最常用的一种树——二叉树,如下图所示:

从图中可以观察到,每个节点最多有两个分支,也就是两个节点,一般称为左子节点右子节点。注意,是最多有两个节点,而不是必须有两个节点。像上图中的C节点只有一个节点(右子节点)。

完全二叉树和满二叉树

在二叉树中有两种特殊的二叉树,分别是完全二叉树和满二叉树。

完全二叉树

如上图所示,节点F、G、H、I和J是叶子节点,这些叶子节点都在最后的两层,最后一层的叶子节点靠左排列,并且除最后一层外,其他层的节点个数达到最大,这样的二叉树即为完全二叉树

满二叉树

如上图所示,节点D、E、F和G是叶子节点,这些叶子节点都在最后一层,且除了叶子节点外其他的节点都有左右两个子节点,这样的二叉树即为满二叉树

二叉树的存储方式

对于二叉树的存储,可以通过链式存储法顺序存储法分别存储。

链式存储法

观察上图可以知道,对于每个节点有三个字段,其中 data表示存储数据, left表示指向左子节点的指针, right表示指向右子节点的指针。如果我们知道了一颗二叉树的根节点,则我们可以通过左右子节点的指针进行查找。大部分的二叉树的代码都是通过链式存储法来实现的。

顺序存储法

观察上图可以知道,当二叉树中的某一个节点 index为i,则它的左子节点的 index2*i+1,它的右子节点的 index2*i+2,它的父节点的 indexi/2。因此,我们只要知道根节点的 index,则可以通过上述表达式进行查找。对于使用顺序存储法时,需要申请连续的内存空间,因此对于节点个数不多完全二叉树和满二叉树比较合适,但是对于不完全二叉树就会造成大量的空间浪费。

二叉树的前序遍历、中序遍历和后序遍历

在对二叉树遍历时,前序、中序和后序是指当前节点与它的左右子节点的打印现后顺序

  • 前序遍历:先打印当前节点,然后打印左子树,最后打印右子树。当前节点 -> 左子树 -> 右子树;
  • 中序遍历:先打印左子树,然后打印当前节点,最后打印右子树。左子树 -> 当前节点 -> 右子树;
  • 后序遍历:先打印左子树,然后打印右子树,最后打印当前节点。左子树 -> 右子树 -> 当前节点。

对上面二叉树的打印顺序分别为:

  • 前序遍历:A -> B -> D -> E -> C -> F -> G
  • 中序遍历:D -> B -> E -> A -> F -> C -> G
  • 后序遍历:D -> E -> B -> F -> G -> C -> A
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法半岛 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 二叉树的理解
  • 完全二叉树和满二叉树
    • 完全二叉树
      • 满二叉树
      • 二叉树的存储方式
        • 链式存储法
          • 顺序存储法
          • 二叉树的前序遍历、中序遍历和后序遍历
          相关产品与服务
          对象存储
          对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档