二叉树的下一个节点

栏目: 数据库 · 发布时间: 6年前

内容简介:前面讲解了《什么叫做二叉树每层节点的下一个节点呢?可以看下图,是一个标准的二叉树。

一、背景

前面讲解了《 前序、中序、后续构造二叉树 》,今天来讲解另一个问题:怎么构造二叉树每层节点的下一个节点。

二、问题

什么叫做二叉树每层节点的下一个节点呢?

可以看下图,是一个标准的二叉树。

二叉树的下一个节点

每个节点有一个指向下一个右侧的节点指针,如果没有下一个,这个指针的值就为 NULL

二叉树的下一个节点

看了这个图,大家应该就明白这篇文章的问题是什么了。

三、标准二叉树

我们先来看看对于标准二叉树,怎么构造同层的下一个节点指针。

仔细看图,可以发现图分两部分:一个是两个子树递归完成这个操作,一个是左子树的最右边指向右子树的最左边。

所以我们实现两个函数即可:一个是对一个树进行构造,一个是左子树和右子树进行构造。

二叉树的下一个节点

四、普通二叉树

对于标准的二叉树,完成同层下一个节点的构造很简单。

但是对于普通的二叉树,就会遇到各种各样的问题。

比如对于下面的二叉树,我们不知道左子树的某一层最右边是哪个了。

二叉树的下一个节点

实际应该这样连接。

而且,有一个更打击人的提示是:二叉树某一层的最左边也不是很容易确定。

二叉树的下一个节点

面对这个问题,可以想到的第一个方法是 BFS

我们使用队列广度优先搜索,每搜索一层,记录当前层的个数。

这样就能一层层的来进行构造下一个节点了。

二叉树的下一个节点

但是,我们看下题的要求,会发现要求使用常数的额外空间。

所以我们就需要观察这道题来找相关特征,从而尝试去找突破口。

假设我们第 n 层已经全部找到下一个节点了。

我们能不能利用第 n 层的信息来快速找到第 n+1 层的节点了。

原来还真可以。

我们只需要保存第 n 层的第一个节点,然后通过遍历 next 可以找到第 n+1 层的第一个节点。

之后继续遍历 next ,就可以找到下一个第 n+1 层的节点,然后串起来即可。

二叉树的下一个节点

五、最后

好了,这篇文章教大家怎么给一个二叉树构造每个节点的下一个节点。

标准二叉树主要学习递归,而普通二叉树,则有点难度了,你想到了吗?

-EOF-


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编码整洁之道

编码整洁之道

罗伯特·C.马丁 / 电子工业出版社 / 2012-8 / 59.00元

忍受各种不确定性及不间断的压力并能够获取成功的程序员有一个共通特征:他们都深度关注软件创建实践。他们都把软件看做一种工艺品。他们都是专家。在“鲍勃大叔”看来“专业”的程序员不仅应该具备专业的技能,更应该具备专业的态度,这也是本书阐述的核心。专业的态度包括如何用带着荣誉感、自尊、自豪来面对进行软件开发,如何做好并做得整洁,如何诚实地进行沟通和估算,如何透明并坦诚地面对困难做抉择,如何理解与专业知识相......一起来看看 《编码整洁之道》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

html转js在线工具
html转js在线工具

html转js在线工具