数据结构与算法(二叉树)
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种方式,分别是前序遍历(根左右),中序遍历(左根右),后续遍历(左右根),遍历的具体操作请进行百度..
数据结构与算法(二叉树)相关推荐
- 数据结构与算法--二叉树第k个大的节点
二叉树第k个大的节点 二叉树文章列表: 数据结构与算法–面试必问AVL树原理及实现 数据结构与算法–二叉树的深度问题 数据结构与算法–二叉堆(最大堆,最小堆)实现及原理 数据结构与算法–二叉查找树转顺 ...
- 数据结构与算法-- 二叉树中和为某一值的路径
二叉树中和为某一值的路径 题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为给定值的所有路径.从树的根节点开始往下一只到叶子节点所经过的节点形成一条路径. 我们用二叉树节点的定义沿用之前文章中 ...
- 数据结构与算法-- 二叉树后续遍历序列校验
二叉树后续遍历序列校验 题目:输入一个整数数组,判断改数组是否是某个二叉搜索树的后续遍历结果,如果是返回true否则false,假设输入数组的任意两个数字不相同. 例如输入{5,7,6,9,11,10 ...
- javascript数据结构与算法--二叉树遍历(中序)
javascript数据结构与算法--二叉树遍历(中序) 中序遍历按照节点上的键值,以升序访问BST上的所有节点 代码如下: /**二叉树中,相对较小的值保存在左节点上,较大的值保存在右节点中*** ...
- 数据结构与算法 -- 二叉树 ADT
树的类型有很多,这里我们只讲二叉树. 一.二叉树的基本概念 1.什么是二叉树 在计算机科中,二叉树是每个节点最多有两个子树的树结构.通常子树被称作"左子树"和"右子树&q ...
- 数据结构与算法--二叉树的深度问题
二叉树的深度 题目:输入一颗二叉树的根,求该树的深度.从根节点到叶子节点一次进过的节点形成的一条路径,最长的路径的长度为树的深度. 如下图中二叉树的额深度4,因为从根节点A到叶子节点的路径中有4个节点 ...
- 数据结构与算法--二叉树实现原理
二叉树 二叉树(binary tree)是一棵树,其中每个节点都不能有多于两个的子节点 二叉树的一个性质是一颗平均二叉树的深度要比节点个数N小得多(重点),对二叉树的分析得出其平均深度为O(N\sqr ...
- 数据结构与算法-二叉树(java描述)
一.概述 1.1.树的概念 树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合.把它叫做"树"是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而 ...
- 数据结构与算法——二叉树、堆、优先队列
*************************************优雅的分割线 ********************************** 分享一波:程序员赚外快-必看的巅峰干货 七 ...
- 树的基本概念和遍历规则 数据结构和算法 二叉树遍历(前序、中序、后序、层次、深度优先、广度优先遍历)
zsychanpin 博客园 首页 新随笔 联系 订阅 管理 树的基本概念和遍历规则 树的递归定义 树是n(n>0)个结点的有限集,这个集合满足下面条件: ⑴有且仅有一个结点没有前驱 ...
最新文章
- 从数组中取出m个数相加的结果(组合)
- 通过ngx-lua来统计Nginx上的虚拟主机性能数据
- vue使用webpack创建项目的命令
- scroll事件实现监控滚动条并分页显示示例(zepto.js)
- CentOS 搭建svn服务器
- java怎么将加载图片消除_Java中加载图片的方法
- flutter-Text 以字符的方式截断
- 求给定精度的简单交错序列部分和(c语言)
- Linux 守护进程的启动方法
- 我第一次面试自动化测试就被diss了,人生惨遭滑铁卢…
- SpringBoot之maven包管理
- 使用VC做一个简单的UI界面对话框
- matlab 电力系统分析 毕设,毕设开题报告_-基于matlab中电力系统模块集(psb的电力系统仿真研究.doc...
- 谷歌浏览器html播放音乐,谷歌浏览器听歌插件:用Listen1听歌超方便!‖干货大放送...
- linux gpt转mbr命令,linux GPT转mbr
- HLG 1506 屠夫和狙击手【判断点在线段上+线段与圆相交】
- TryHackMe-Misguided Ghosts(boot2root)
- 北京奥运会赛事电视直播表(绝对完整)--每天就抱着电视看吧!
- 【粉丝福利,限时免费】【千里之行,始于脚下】我在CSDN上的精品博文汇总,收藏起来慢慢看
- 查oracle的tps,Oracle TPS指标