1>前面我们已经讲了线性结构,栈,队列,链表等线性结构,今天我们来讲一下一种非常重要的非线性结构:树

解释:你有没有发现非线性结构"树"和我们现实生活中的"树"很相似,这里面每一个点都是树的节点,节点与节点存在这某种关系,比如节点与节点相连接的关系叫做父子节点

解释:B,C,D的父节点是A,B,C,D被叫做兄弟节点,B,C,D是A的子节点,没有父子节点的节点叫做根节点,如图E,我们把没有子节点的节点叫做叶子节点,比如GHIJKL节点除此之外数据还有深度,高度,层的概念

 高度:节点到叶子节点的最长路径(边数)

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

层数:节点的深度+1

树的高度:根节点的高度

这3个概念容易比较混淆,我们必须明确,讨论高度,必须从下到上谈起,且从0为基准开始,讨论深度,必须从上到下谈起,也是以0作为基准.举个列子,一看就明白了

2>二叉树

二叉树,顾名思义,每个节点做多有2个叉,一个左节点,一个右节点.,有的二叉树只有左节点,有的二叉树只有右节点,

上图是典型的二叉树,不过上图有2个特殊二叉树,2号图为满二叉树,3号图为完全二叉树

满二叉树:除了叶子节点,没个节点都有左节点和右节点,这样的二叉树是满二叉树

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

3>二叉树的存储方式

我们先看一下数的链式存储方式,

解释:      我们可以很清楚的看到,每个节点都分为3部分,一部分存储数据,另外2部分分别是指向左右节点的指针,我们主要抓住根节点就可以把整个二叉树挂起来.

基于数组的存储方式 

我们把根节点的下标设置为1那么A的左节点的下标为2*i,则右节点的下标为2*i+1,以此类推,B的右子节点的下标为 2*i=4,右节点的下标为2*i+1,我们只要知道根节点的下标,就可以计算出每个节点的下标位置,i/2是它的父节点  2i+1是右节点  2i是左节点.

根据数组的存储方式,对于完全二叉树来树,根节点的下标是从1开始的,所以他会浪费数组的一个存储空间,即第0个位置

我们举一个非完全二叉树的列子,我们来看看他在数组中的存储方式

总结,无疑的是,如果是以个完全的二叉树,使用数组的方式是最节省空间的,用数组来实现完全二茶叉树的存储,只是需要浪费一个存储空间,但是基于链表方式,我们需要更到的内存空间开存储每个节点的指向左右节点的指针,这也是为什么完全二叉树的最后一层的子节点都靠左的原因,为了防止浪费更多的内存空间.

3>二叉树的遍历

二叉树的遍历右3种方式,分别是前序遍历(根左右),中序遍历(左根右),后续遍历(左右根),遍历的具体操作请进行百度..

数据结构与算法(二叉树)相关推荐

  1. 数据结构与算法--二叉树第k个大的节点

    二叉树第k个大的节点 二叉树文章列表: 数据结构与算法–面试必问AVL树原理及实现 数据结构与算法–二叉树的深度问题 数据结构与算法–二叉堆(最大堆,最小堆)实现及原理 数据结构与算法–二叉查找树转顺 ...

  2. 数据结构与算法-- 二叉树中和为某一值的路径

    二叉树中和为某一值的路径 题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为给定值的所有路径.从树的根节点开始往下一只到叶子节点所经过的节点形成一条路径. 我们用二叉树节点的定义沿用之前文章中 ...

  3. 数据结构与算法-- 二叉树后续遍历序列校验

    二叉树后续遍历序列校验 题目:输入一个整数数组,判断改数组是否是某个二叉搜索树的后续遍历结果,如果是返回true否则false,假设输入数组的任意两个数字不相同. 例如输入{5,7,6,9,11,10 ...

  4. javascript数据结构与算法--二叉树遍历(中序)

    javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /**二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中*** ...

  5. 数据结构与算法 -- 二叉树 ADT

    树的类型有很多,这里我们只讲二叉树. 一.二叉树的基本概念 1.什么是二叉树 在计算机科中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"和"右子树&q ...

  6. 数据结构与算法--二叉树的深度问题

    二叉树的深度 题目:输入一颗二叉树的根,求该树的深度.从根节点到叶子节点一次进过的节点形成的一条路径,最长的路径的长度为树的深度. 如下图中二叉树的额深度4,因为从根节点A到叶子节点的路径中有4个节点 ...

  7. 数据结构与算法--二叉树实现原理

    二叉树 二叉树(binary tree)是一棵树,其中每个节点都不能有多于两个的子节点 二叉树的一个性质是一颗平均二叉树的深度要比节点个数N小得多(重点),对二叉树的分析得出其平均深度为O(N\sqr ...

  8. 数据结构与算法-二叉树(java描述)

    一.概述 1.1.树的概念 树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合.把它叫做"树"是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而 ...

  9. 数据结构与算法——二叉树、堆、优先队列

    *************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 七 ...

  10. 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)

    zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件:       ⑴有且仅有一个结点没有前驱 ...

最新文章

  1. 从数组中取出m个数相加的结果(组合)
  2. 通过ngx-lua来统计Nginx上的虚拟主机性能数据
  3. vue使用webpack创建项目的命令
  4. scroll事件实现监控滚动条并分页显示示例(zepto.js)
  5. CentOS 搭建svn服务器
  6. java怎么将加载图片消除_Java中加载图片的方法
  7. flutter-Text 以字符的方式截断
  8. 求给定精度的简单交错序列部分和(c语言)
  9. Linux 守护进程的启动方法
  10. 我第一次面试自动化测试就被diss了,人生惨遭滑铁卢…
  11. SpringBoot之maven包管理
  12. 使用VC做一个简单的UI界面对话框
  13. matlab 电力系统分析 毕设,毕设开题报告_-基于matlab中电力系统模块集(psb的电力系统仿真研究.doc...
  14. 谷歌浏览器html播放音乐,谷歌浏览器听歌插件:用Listen1听歌超方便!‖干货大放送...
  15. linux gpt转mbr命令,linux GPT转mbr
  16. HLG 1506 屠夫和狙击手【判断点在线段上+线段与圆相交】
  17. TryHackMe-Misguided Ghosts(boot2root)
  18. 北京奥运会赛事电视直播表(绝对完整)--每天就抱着电视看吧!
  19. 【粉丝福利,限时免费】【千里之行,始于脚下】我在CSDN上的精品博文汇总,收藏起来慢慢看
  20. 查oracle的tps,Oracle TPS指标

热门文章

  1. cols - 表头参数一览表
  2. 作为人才我们为什么要和几个猎头保持良好的关系?
  3. JavaScript Date相关练习
  4. 电信家庭宽带光猫端口映射实现外网访问家庭内网
  5. 山东境内的自驾游景点一览表
  6. 计算机抠图知识,计算机PS抠图方法.doc
  7. 图形学知识基础:三维变换,旋转(欧拉角旋转与万向锁,绕任意轴旋转,四元数)
  8. Phaser用法详解
  9. xbrowser连接Linux没有桌面,Windows下使用Xbrowser连接Centos 6.x自带的远程桌面
  10. Windows10正式版为什么没有休眠选项?