前序遍历二叉树前序遍历,程序有问题

硕士/研究生
&&&&&&DOC文档下载
游客快捷下载
会员登录下载
下载资源需要5元
邮箱/手机号:
您支付成功后,系统会自动为您创建此邮箱/手机号的账号,密码跟您输入的邮箱/手机号一致,以方便您下次登录下载和查看订单。
支付方式:
已注册用户请登录:
当日自动登录&&
&&合作网站一键登录:
1、本站资源不支持迅雷下载,请使用浏览器直接下载(不支持QQ浏览器);
2、文档下载后都不会有金锄头文库的水印,预览文档经过压缩,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、所有文档都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的,可以点击右侧栏的客服对话;
下载须知 | 常见问题汇总
二叉树的前序遍历程序的实现实验报告
实验二二叉树的前序遍历程序的实现实验报告姓名学号日期2012128(以下内容用五号字书写,本页空白不够可续页)一、实验程序INCLUDEINCLUDESTRUCTNODE{INTDATASTRUCTNODELCHILDSTRUCTNODERCHILD}STRUCTNODECREATREE{INTEDATASTRUCTNODEHEADSCANFD,IFEDATA0{HEADNULL}ELSE{HEADSTRUCTNODEMALLOCSIZEOFSTRUCTNODEHEADDATAEDATAPRINTF请输入结点值为D的左孩子的值E,HEADDATAHEADLCHILDCREATREEPRINTF请输入结点值为D的右孩子的值E,HEADDATAHEADRCHILDCREATREE}RETURNHEAD}VOIDPREORDERSTRUCTNODET{STRUCTNODEPSTRUCTNODES50INTTOP1PTDO{WHILEPNULL{PRINTFD,PDATAIFPRCHILDNULL{TOPTOP1STOPPRCHILD}PPLCHILD}IFTOP1{PSTOPTOPTOP1}}WHILEPNULL||TOP1}INTMAIN{STRUCTNODETPRINTF请输入根结点的值ETCREATREEPREORDERTRETURN0}二、实验过程根据提示,依次输入根节点及左右孩子,其中以0作为输入的结束控制。三、实验分析若输入的根节点是0或其他非整型数据的话,则输入结束。输入合法的话,程序将利用递归的算法对依次对用户输入的值进行记录,从而建立二叉树。递归算法的关键是PRINTF请输入结点值为D的左孩子的值E,HEADDATAHEADLCHILDCREATREEPRINTF请输入结点值为D的右孩子的值E,HEADDATAHEADRCHILDCREATREE当建立好二叉树后,利用循环结构对二叉树实现线序遍历,关键是在遍历左子树的时候,将右子树的数据保护下来,在程序中通过将数据保存在栈中实现,关键的步骤在于IFPRCHILDNULL{TOPTOP1STOPPRCHILD}PPLCHILD这几句可以让右子树的数据进栈,将左子树的数据传给循环变量P。遍历完左子树以后,再将栈中的数据依次提取出来。四、实验结论通过二叉树的建立,可以掌握递归算法的调用过程。二叉树的先序遍历是访问根结点、前序遍历左子树、前序遍历右子树,通过算法的编辑,可以很好地理解数据进出栈的过程。以上的程序实现了先序遍历的过程。
本文(二叉树的前序遍历程序的实现实验报告)为本站会员(豆浆)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“”【网址:】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。
分享当前资源【二叉树的前序遍历程序的实现实验报告】到朋友圈,您即可以免费下载此资源!
微信扫一扫分享到朋友圈
操作提示:任选上面一个二维码,打开微信,点击“发现”使用“扫一扫”,即可将选择的网页分享到朋友圈
您可能感兴趣的------------------------------------------------------------------------------------------------------
元price_share
&|&川公网安备 12号&|&经营许可证(蜀ICP备号-1)(C) by Sichuan Goldhoe Inc. All Rights Reserved.
&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>一、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>本站提供全自助服务,购买后点击下载按钮可以下载到你电脑或手机(系统不会发送文档到您的邮箱),请注意查看下载存放位置;&/span>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>二、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>本站具有防盗链功能,所以不要使用迅雷、旋风、网际快车等第三方辅助下载工具(不支持&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>QQ浏览器&/span>),否则下载下来的文件只是网页或乱码;&/span>&br/>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>三、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>由于网络原因、下载知识欠缺、本地电脑&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>或&/span>手机阻止下载等问题无法解决时,需要提供以下&/span>&span style=&font-family: 微软雅黑, &Microsoft YaHei&; color: rgb(255, 0, 0);&>任意一条信息&/span>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>给我们,我们才能更及时地为你服务:&/span>&br/>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.1、如果是注册的会员,请告诉我们你的会员账号;&/span>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.2、如果是游客下载的,请告诉我们你下载时填写的手机或者邮箱;&/span>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.3、如果是微信或QQ快捷登陆的,请告诉我们你的微信或QQ昵称;&/span>&/p>&p>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>3.4、如果这些你仍然无法确定,请告诉我们你的付款单号(我们可以通过单号反过来查询你的账号和下载记录)&/span>&a href=&http://www.jinchutou.com/i-93.html& target=&_blank& style=&text-decoration: color: rgb(255, 192, 0); font-family: 微软雅黑, &Microsoft YaHei&;&>&span style=&color: rgb(255, 192, 0); font-family: 微软雅黑, &Microsoft YaHei&;&>看看什么是单号?&/span>&/a>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>;&/span>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>四、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>需要下载哪份文档,请发送文档网址,而不是截图,更不要直接把标题给我们;&/span>&br/>&/p>&p>&strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>五、&/span>&/strong>&span style=&font-family: 微软雅黑, &Microsoft YaHei&;&>其它下载常见问题详见:&/span>&a href=&http://www.jinchutou.com/info-0-23-1.html& target=&_blank& style=&font-family: 微软雅黑, &Microsoft YaHei&;&>http://www.jinchutou.com/info-0-23-1.html&/a>&br/>&/p>&p>&br/>&/p>" />
?&/span>&span id=&_baidu_bookmark_start_4& style=&display: line-height: 0&>?&/span>&p>&span style=&font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>& & 鉴于本网发布稿件来源广泛、数量较多, 系统审核过程只针对存在明显违法有害内容(如色情、暴力、反动、危害社会治安及公共安全等公安部门明文规定的违法内容)进行处理,难以逐一核准作者身份及核验所发布的内容是否存在侵权事宜, 如果著作权人发现本网已转载或摘编了其拥有著作权的作品或对稿酬有疑议, 请及时与本网联系删除。&/span>&/p>&p>&strong style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 white-space: background-color: rgb(255, 255, 255);&>& & 侵权处理办法参考版权提示一文:&/strong>&a href=&http://www.jinchutou.com/h-59.html& target=&_blank& textvalue=&http://www.jinchutou.com/h-59.html&>http://www.jinchutou.com/h-59.html&/a>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>&&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>1、如涉及内容过多,需要发送邮箱,请电子邮箱到,我们会及时处理;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>2、系统一旦删除后,文档肯定是不能下载了的,但展示页面缓存需要一段时间才能清空,请耐心等待2-6小时;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>3、请版权所有人(单位)提供最起码的证明(证明版权所有人),以便我们尽快查处上传人;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>4、请文明对话,友好处理;&/span>&/p>&p>&span style=&color: rgb(102, 102, 102); font-family: 微软雅黑, Arial, &Times New Roman&; font-size: 14 background-color: rgb(255, 255, 255);&>5、为了杜绝以前再有类似的侵权事情,可以为我们提供相应的关键字,便于管理人员添加到系统后能有效排除和抵制与您(贵单位)相关版权作品上传;&/span>&/p>&span id=&_baidu_bookmark_end_5& style=&display: line-height: 0&>?&/span>&span id=&_baidu_bookmark_end_3& style=&display: line-height: 0&>?&/span>" />
&span style=&color: rgb(85, 85, 85); font-family: 微软雅黑; background-color: rgb(255, 255, 255);&>& & 为了维护合法,安定的网络环境,本着开放包容的心态共建共享金锄头文库平台,请各位上传人本着自律和责任心共享发布有价值的文档;本站客服对于上传人服务前,有以下几点可提前参阅:&/span>&/p>&p>&span style=&color: rgb(85, 85, 85); font-family: 微软雅黑; background-color: rgb(255, 255, 255);&>1、本站上传会员收益见:&a href=&http://www.jinchutou.com/h-36.html& target=&_blank&>http://www.jinchutou.com/h-36.html&/a> &/span>&/p>&p>2、本站不会为任何刚注册的上传会员特批解除上传限制,普通会员每天可以上传50份,值班经值会审核其上传内容,请自行观察自己上传的文档哪些在“临时转换中”(审核通过),哪些在审核拒绝中,连续坚持几天都没有任何文档被拒的情况下,根据文档质量和发布分类是否正常等考量合格后值班经理会特批升级会员等级,相应的权益也同时上升。&/p>&p>3、上传人本着友好、合作、共建、共享的原则,请耐心仔细的查看《&a href=&http://www.jinchutou.com/i-143.html& target=&_blank&>违禁作品内容处理规则》;&/a>&a href=&http://www.jinchutou.com/i-143.html& target=&_blank&>http://www.jinchutou.com/i-143.html&/a>&/p>&p>4、上传人可以观注本站公告,查看其它被公示永久封禁的原因&a href=&http://www.jinchutou.com/news-1.html& target=&_blank&>http://www.jinchutou.com/news-1.html&/a>&/p>&p>5、其它问题可以参阅上传常见问题指引:&a href=&http://www.jinchutou.com/info-0-25-1.html& target=&_blank&>http://www.jinchutou.com/info-0-25-1.html&/a>&/p>" />Android程序员面试会遇到的算法(part 1 关于二叉树的那点事) 附Offer情况 - 简书
Android程序员面试会遇到的算法(part 1 关于二叉树的那点事) 附Offer情况
今年可谓是跌宕起伏的一年,幸好结局还算是圆满。开年的时候由于和公司CTO有过节,被"打入冷宫",到下半年开始找工作,过程还是蛮艰辛。先分享一下offer的情况
1.阿里口碑(offer)
2.Wish(offer)
3.Booking(Offer)
4.今日头条(Offer)
5.Airbnb(北京)被拒
最让我开心的是拿到了硅谷的offer!
FaceBook Menlo Park总部的offer
Amazon 西雅图总部 offer
在面试的过程中我深深的感受到,对于一个优秀的安卓开发来说,首先摆在第一位的还是他/她作为一个软件工程师的基本素养。无论你是做前端还是后端,最后定义你的优秀程度的还是作为软件工程师的基本素养,学习能力和编程能力,还有设计能力。我自己在现在的公司也做过面试官,发现新加坡的大部分码农(东南亚的码农),对基础的编程能力实在是有所欠缺,熟练的使用API却不能理解为什么。
很多同学会在长久以往的业务逻辑开发中慢慢迷失,逐渐的把写代码变成了一种习惯,而没有再去思考自己代码的优化,结构的调整。这个现象不止是安卓开发的小伙伴有,任何大公司的朋友都会遇到。所以我这一系列的文章打算深入的讲解一下对于安卓程序员面试中可能遇到的算法。也希望能培养大家多思考,业余时间多动手写好代码,优质代码的习惯。
那么第一篇我打算着重讲一下二叉树的问题。
1.二叉树的递归(深度优先)处理
相信大家以前在学习算法与数据结构的时候都遇到过。比如说,打印二叉树前序,中序,后序的字符串这种问题。一般来说我们会选择使用递归的形式来打印,比如说
** 二叉树节点
public class TreeNode{
TreeNode R
public void printInoderTree(TreeNode root){
//base case
if(root == null){
//递归调用printTree
printInoderTree(root.left);
System.out.println(root.val);
printInoderTree(root.right);
public void printPreoderTree(TreeNode root){
//base case
if(root == null){
//递归调用printTree
System.out.println(root.val);
printPreoderTree(root.left);
printPreoderTree(root.right);
一开始上学的时候,我这几段代码都是背下来的,完全没有理解其中的奥妙。对于二叉树的递归操作,其实正确的理解方式
把每次递归想象成对其子集(左右子树)的一个操作,假设该递归已经可以处理好左右子树,那么根据已经处理好的左右子树在调整根节点。
这样的思想其实和分而治之 分治法 相似,就是把一个大问题先分成小问题,再去解决。我们还是以二叉树的中序打印为例子。
因为中序打印我们需要以左中右的顺序打印二叉树,以下图为例子我们分解一下问题。
inorder_hightlights.gif
上面这个gif详细的解释了怎么叫分而治之,首先,我们假设A节点的左右子树分开而且已经打印完毕,那么只剩下A节点需要单独处理,那么久打印它。对于B子树来说,我们以同样的思维处理。所以动图里面是B子树先铺平,然后轮到A节点,最后到C子树。
最后我们需要考虑一下这个递归的结束条件。我们假设A节点左右子树都为空,null,那么在调用该方法的时候我们需要在Node为空的时候直接返回不做任何操作。该条件我们一般称为递归的Base Case。每个递归都是这样,先想好我们怎么把问题分治, 再考虑base case是哪些,怎么处理,我们的递归就结束了。
问题来了,我们明明要讲深度优先,为什么讲起递归了。两者的联系是什么?
其实递归对于很多数据结构来说,就是深度优先,比如二叉树,图。因为在递归的过程中,我们就是在一层一层的往下走,比如对于二叉树的中序打印来说,我们递归树的左节点,除非左节点为空,我们会一直往下走,这本身就是深度优先了。所以一般来说,对于深度优先,我们都会用递归来解决,因为写起来最方便。当然我们深度优先如果不想用递归,还可以使用栈(Stack)来解决,我们在以后的文章来讲(不过大家需要知道的是,递归本身就是使用方法栈的一种操作,联想一下我们常常听到的StackOverFlow,你应该能明白其中的奥妙了吧)。
好!相信我已经勾起了大家对大学算法课的记忆了!那么我们来巩固一下。使用分治思想+递归,我们就已经可以解决大部分二叉树的问题了。 我们来看一道题目-&
1.1 翻转二叉树
这道题是一个经典的题目,Mac上著名软件的作者曾经在面试Google的时候被问到了,还没做出来,因此最后被拒。。。。于是他在个人推特上抱怨到:
Google: 90% of our engineers use the software you wrote (Homebrew), but you can’t invert a binary tree on a whiteboard so fuck off.
最后大家的关注点就慢慢从作者被拒本身转移到了题目上了。。。那我们看看这道题到底有多难。
Screen Shot
at 2.45.49 PM.png
Screen Shot
at 2.46.39 PM (1).png
看起来好像很麻烦的样子,每个子树本身都被翻转一遍。但是我们使用分治的思维,假如说我们有个函数,专门翻转二叉树的。假如我们把B子树翻转好,再把C子树翻转好,那么我们要做的岂不就是简单的把A节点的左赋给C(原来是B),再把A节点的右赋给B(原来是C)。这个问题是不是就解决了?
翻转二叉树.gif
对于B和C我们可以用同样的分治思维去递归解决。用一段代码来描述一下
public TreeNode reverseBinaryTree(TreeNode root){
//先处理base case,当root ==null 时,什么都不需要做,返回空指针
if(root == null){
//把左子树翻转
TreeNode left = reverseBinaryTree(root.left);
//把右子树翻转
TreeNode right = reverseBinaryTree(root.right);
//把左右子树分别赋值给root节点,但是是翻转过来的顺序
root.left =
root.right =
//返回根节点
根据这个例子,再加上中序打印的题目,我们应该已经可以很轻松的理解到了,对于二叉树的题目或者算法,分而治之 和 递归 的核心思想了,就是把左右子树分开处理,最后在把结果合并(把处理好的左右子树对应根节点进行处理)。
那么接下来我们来一个复杂一点点的题目
1.2 把二叉树铺平
这个题目我们需要把一个二叉树变成一个类似于链表的结构,所有的子节点都移到右节点去,看图为例。
Screen Shot
at 2.45.49 PM.png
Screen Shot
at 5.55.26 PM.png
从图中我们可以看出来,把二叉树铺平的这个过程,是先把左子树铺平,链接到根节点的右节点上面,再把右子树铺平,链接到已经铺平的左子树的最后一个节点上。最后返回根节点。那么我们从一个宏观的角度来说,需要做的就是先把左右子树铺平。
假设我们有一个方法叫flatten(),它会把一个二叉树铺平最后返回根节点
public TreeNode flatten(TreeNode root){
那么从宏观的角度,我们对铺平这个操作,已经做完了!!!接下来就是第二步,还是以一个动画来阐述这个过程。
flatten.gif
最终代码如下,附上注释
public TreeNode flatten(TreeNode root){
//base case
if(root == null){
//用递归的思想,把左右先铺平
TreeNode left = flatten(root.left);
TreeNode right = flatten(root.right);
//把左指针和右指针先指向空。
root.left =
root.right =
//假如左子树生成的链表为空,那么忽略它,把右子树生成的链表指向根节点的右指针
if(left == null){
root.right =
//如果左子树生成链表不为空,那么用while循环获取最后一个节点,并且它的右指针要指向右子树生成的链表的头节点
root.right =
TreeNode lastLeft =
while(lastLeft != null && lastLeft.right != null){
lastLeft = lastLeft.
lastLeft.right =
至此,我们已经做完了这道题了,希望大家最后能好好理解我们所谓的分而治之的思想和二叉树中对左右子树递归的处理。大部分的二叉树算法题也就是围绕着这个思想为中心,只要从宏观上能把对左右子树处理的逻辑想清楚,那么就不难解决了。
1.3 安卓开发中遇到的树形结构?
那么对于安卓开发中,我们会不会遇到类似的问题呢?或者说安卓开发中会遇到树形结构的算法么?
答案是肯定有!
我们都知道在安卓系统里面,每个ViewGroup里面又会包含多个或者零个View,每一个View 或者 ViewGroup 都有一个整型的Id,那么每次我们在使用ViewGroup的findViewById(int id)的时候,我们是以什么方式来查找并返回在当前ViewGroup下面,我们要查找的View呢?
这个也是我非常喜欢对来我司应聘的求职者的问题,不过很遗憾,目前为止能完完整整写出来的就一个。。。。(再次可见东南亚开发者的水平,不忍吐槽)
images.jpeg
那么题目来了
请完成以下方法
//返回一个在vg下面的一个View,id为方法的第二个参数
public static View find(ViewGroup vg, int id){
可以使用的方法有:
View -& getId() 返回一个int 的 id
ViewGroup -& getChildCount() 返回一个int的孩子数量
ViewGroup -& getChildAt(int index) 返回一个孩子,返回值为View。
这个题目就可以说非常经典了,以往的树形结构的题目,我们都是做一个二叉树的处理,除了左就是右,但是这里我们每个ViewGroup都可能有多个孩子,每个孩子既可能是ViewGroup,也可能只是View(ViewGroup是View的子类,这里是一个知识点!)
我这里就不做过多的解释了,直接贴代码,而且安卓系统本身也是用这种方式进行View的查找的。
//返回一个在vg下面的一个View,id为方法的第二个参数
public static View find(ViewGroup vg, int id){
if(vg == null)
int size = vg.getChildCount();
//循环遍历所有孩子
for(int i = 0 ; i&i++){
View v = vg.getChildAt(i);
//如果当前孩子的id相同,那么返回
if(v.getId == id)
//如果当前孩子id不同,但是是一个ViewGroup,那么我们递归往下找
if(v instance of ViewGroup){
View temp = find((ViewGroup)v,id);
//如果找到了,就返回temp,如果没有找到,继续当前的for循环
if(temp != null){
//到最后还没用找到,代表该ViewGroup vg 并不包含一个有该id的孩子,返回空
2.二叉树的层序处理(广度优先)
说到广度优先,大部分同学可能会想到图,不过毕竟树结构本身就是一种特殊的图。所以一般说树,尤其是二叉树的广度优先我们指的一般是层序遍历。
Screen Shot
at 2.45.49 PM.png
层序打印的结果就是A-&B-&C-&D-&D-&E-&F-&G
对于层序遍历的相关算法,真理只有一个!
382e000ea580c1da6f3f.jpeg
就是用队列(Queue)!
道理很简单,每次遍历当前节点的时候,把该节点从队列拿出来,并且把它的子节点全部加入到队列中。over~
上一个简单的打印代码
public void printTree(TreeNode root){
if(root == null){
Queue queue = new LinkedList();
queue.add(root);
while(!queue.isEmpty()){
TreeNode current = queue.poll();
System.out.println(current.toString());
if(current.left != null){
queue.add(current.left);
if(current.right != null){
queue.add(current.right);
这段代码很简单,利用队列先进先出的性质,我们可以一层层的打印二叉树的节点们。
所以对于二叉树的层序遍历来说,一般都会使用队列,这都是套路。因此,二叉树的层序遍历相对来说比较简单,大家下次见到二叉树的层序遍历相关的面试题,先大胆的和面试官说出你打算使用队列,肯定没错!
download.jpeg
最后对于层序遍历来说我们再来一个比较具有代表性的题目!
2.1 链接二叉树的Next节点
这个题目要求大家在拥有一个二叉树节点的左右节点指针之余,还要帮它找到它的next指针指向的节点。
大概是这样:
Screen Shot
at 5.53.29 PM copy.png
在上面这个图中,红色的箭头代表next指针的指向
逻辑很简单,每一个的节点的next指向同一层中的下一个节点,不过如果该节点是当前层的最后一个节点的话,不设置next,或者说next为空。
其实这个题目就是典型的层序遍历,使用队列就可以轻松解决,每次poll出来一个节点,判断是不是当前层的最后一个,如果不是,把其next设置成queue中的下一个节点就ok了。至于怎么判断当前节点是哪一层呢?我们有个小技巧,使用当前queue的size做for循环,且看代码
public void nextSibiling(TreeNode node){
if(node == null){
Queue queue = new LinkedList();
queue.add(node);
//这个level没有实际用处,但是可以告诉大家怎么判断当前node是第几层。
int level = 0;
while(!queue.isEmpty()){
int size = queue.size();
//用这个for循环,可以保证for循环里面对queue不管加多少个子节点,我只处理当前层里面的节点
for(int i = 0;i&i++){
//把当前第一个节点拿出来
TreeNode current = queue.poll();
//把子节点加到queue里面
if(current.left != null){
queue.add(current.left);
if(current.right != null){
queue.add(current.right);
if(i != size -1){
//peek只是获取当前队列中第一个节点,但是并不把它从队列中拿出来
current.next = queue.peek();
二叉树的知识点我就大概讲这些,下次的文章我会接着详细的讲深度优先和广度优先的算法。深度优先是一个非常非常宽泛而且难以完全掌握的知识点,我会用详细的篇幅来覆盖所有的深度优先的基本题型,包括对树,图的深度优先搜索,集合的回朔等等。
树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定义和基本术语 计算机世界里的树,是从自然界中实际的树抽象而来的,它指的是N个有父子关系的节点的有限集合。对于这个有限的节点集合而言,它满足如下条件: 当N=0时...
本文转自 http://www.cnblogs.com/manji/p/4903990.html二叉树-****你必须要懂!(二叉树相关算法实现****-iOS)这几天详细了解了下二叉树的相关算法,原因是看了唐boy的一篇博客(你会翻转二叉树吗?),还有一篇关于百度的校园招...
1.什么是二叉树? 在计算机科学中,二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”和“右子树”,左子树和右子树同时也是二叉树。二叉树的子树有左右之分,并且次序不能任意颠倒。二叉树是递归定义的,所以一般二叉树的相关题目也都可以使用递归的思想来解决,当然也有一...
1 序 日夜,帝都,天下着大雨,拖着行李箱和同学在校门口照了最后一张合照,搬离寝室打车去了提前租好的房子,算来工作刚满一年。在过去的一年里,很庆幸刚迈出校门的我遇见了现在的这一群同事,这一帮朋友,虽然工作之初经历波折,还是很开心有现在的工作环境。其实走在这...
基于树实现的数据结构,具有两个核心特征: 逻辑结构:数据元素之间具有层次关系; 数据运算:操作方法具有Log级的平均时间复杂度。 因此,树在文件系统、编译器、索引以及查找算法中有很广的应用,本节将以树-二叉树-二叉搜索树-自平衡二叉树为线索,对树及其扩展结构进行说明。 栈和...
自从做形象顾问以后,经常会有一些朋友在逛街时发来一些在商场试衣服的照片,询问衣服好看与否?从微信发来的图片看,颜色大多数还是适合的,因为上过几次色彩搭配的课程,有一些基本的色彩知识,而款式、面料与她的风格、职业不大相符。结果是,这件衣服既没有让你有多好看,也没有让你有...
现在是我最美丽的年纪, 只擦了唇膏就可以拍出好看的证件照。 现在是我最美丽的年纪, 瘦身,出国,成家,吃天下。 现在是我最美丽的年纪, 因为年轻,因为未定,因为一切皆有可能。
前言 近期研究了一下Glide的图片加载框架,在这里和大家分享一下。由于代码研读有限,难免有错误的地方,了解的童鞋还望指正。学习小组QQ群: 。 本篇是Glide框架及源码解析的第三篇,更多文章敬请关注后续文章。如果这篇文章对大家学习Glide有帮助,还望...
一张购物卡
刘局长最近这几日颇不开心,是非常郁闷那种感觉。那个一直对自己低眉顺眼、含情脉脉的美女小白老师,已经有几天不答理自己了!不就是这次高级职称评审没通过吗?前些天还总喜笑颜开、深情脉脉地看着自己,说是十分欣赏自己的能力,怎么这几日下班以后约她,她都推辞了...
今天真是为自己的愚蠢,气死了,心想真有人是蠢猪,蠢死的。 事情是这么回事,每天上班都要搭公交车,问题就是每天公交车390都特别的满员,被挤在大门口的感觉很是不能适应。 刚好有一天,出门晚了,390也走了,恰巧581来了,而且空车有位置~~

我要回帖

更多关于 二叉树中序遍历 的文章

 

随机推荐