二叉树遍历_常数空间

PotPlayer 史诗级更新!实时字幕生成+实时翻译,看片真的无敌了! potplayer已经更新实时字幕生成+实时字幕翻译功能 阅读详情

昨天看到一个帖子,询问二叉树遍历问题,还不错!贴来:

 

题目:

遍历n个节点的二叉树 (每个节点有parent, left, right 信息 ) 要求: 
1)不可以修改二叉树,即便是临时的。 
2)时间 O(n) 
3) 除了二叉树本身,只使用常数个空间。( 常数不依赖n ) 

 

 

My Answer:

首先这个题目,肯定不能递归,或者用队列什么的,否则空间不满足要求, 

因为有pare信息,所以,在遍历时,只要记录访问当前节点时,上一次访问的地方,就可以了: 

简单给个代码,简单样例通过,但没有充分测试: 


/ 

Qt 5.14安装(配置MSVC 2017) 本文主要介绍Qt MSVC的安装,VS2017. 阅读详情

相关推荐

基于MicroBlaze与LWIP的FPGA以太网通信实战指南

本文详细介绍了基于MicroBlaze软核处理器与LWIP协议栈的FPGA以太网通信实现方案。通过Vivado工具链配置硬件设计,结合LWIP轻量级TCP/IP协议栈优化,提供高效、低成本的嵌入式网络解决方案,适用于工业控制等场景。文章包含硬件设计、软件配置及常见问题排查等实战指南。

weixin_29290863的博客 534

反转单链表-常数附加空间且O(N)时间

反转链表光是O(N)要求可以先存入数组再从尾部读入单链表。 若是要求常数附件空间,代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef struct node Node; 5 typedef struct node List; 6 struct node { 7 ...

weixin_30456039的博客 368

AD9361 官方例程详解(一)

文章目录前言一、pandas是什么?二、使用步骤总结 前言 一、pandas是什么? 二、使用步骤 总结

weixin_44630490的博客 4万+

常数空间实现归并排序

今天写了一道题,要求用O(nlogn)的时间复杂度排序。单链表存储的。快排,堆排序,归并排序的时间复杂度是O(nlogn),只有归并排序比较适合单链表的操作。 题目又要求,空间复杂度是常数级别的。这里我们知道,普通的归并排序,空间复杂度是由辅助空间和递归的栈空间构成的。 一开始以为指的是辅助空间,消除辅助空间的归并方法有如下两种。 两条链表,确定一个次序,比如第一条链表存小的值。然后要是第一条链表值大于第二条链表,交换。由于交换过后,可能导致第二条链表不是有序的,在这里可以使用冒泡排序的方法让其有序。这样

qq_43243107的博客 574

【STM32项目】基于stm32智能鱼缸控制系统的设计与实现(完整工程资料源码)

随着现代化经济的快速发展,物质条件富足的人开始追求精神富足,越来越多的人通过饲养观赏鱼来充实生活、释放压力,但并非所有饲养者都有时间和经验来管理好鱼缸。一种由单片机控制,可实时检测和调节鱼缸环境,可把鱼缸环境实时反映给用户并能被用户远程操控的系统,可以解决养鱼成活率低、耗费时间和精力、参与感不强等诸多难题。

嵌入式技术开发 7354

FreeRTOS深入教程(任务创建的深入和任务调度机制分析)

本篇文章将带大家深入学习任务的创建和分析任务调度的机制。本篇文章深入的讲解了任务创建的内部实现和任务调度的源代码分析和实现,学习这篇文章有助于更深入的学习FreeRTOS的源码。

m0_49476241的博客 6391

复杂度分析之空间复杂度

几种空间复杂度 1. 常量空间 当算法的存储空间大小固定,和输入规模没有直接的关系时,空间 复杂度记作O(1)。例如下面这段程序: void fun1(int n){ int var = 3; … } 2. 线性空间 当算法分配的空间是一个线性的集合(如数组),并且集合大小和 输入规模n成正比时,空间复杂度记作O(n)。 例如下面这段程序: void fun2(int n){ int[] a...

赵小白的博客 804

Qt QCustomPlot 图形库详解及使用

QCustomPlot 是一个开源的 Qt C++ 库,专门用于创建数据图表。易于集成到 Qt 项目中。支持多种图表类型,如折线图、散点图、条形图等。提供丰富的交互功能,如缩放、平移、选择和拖动。高度可定制,支持图形的各种样式设置。// 添加第一条曲线i < 101;++i) {// 设置曲线颜色// 添加第二条曲线i < 101;++i) {// 设置曲线颜色// 设置散点样式// 添加图例。

MusicScore的博客 764

Morris Traversal-常量空间下遍历二叉树

morris traversal,常量空间复杂度下线性遍历二叉树

New coder, Step further 604

vue3 - 最新详细实现高德地图绘制动态热力图详细教程,在某区域或城市地图上做“热力图层“展示人流量、旅游人口密度、热量图、全国地区地理热力图,利用颜色的深浅表示密度或强度等场景(详细示例代码教程)

vue3,nuxt3,高德地图,热力图,绘制热力图层,人流量,vue3使用高德地图实现某个区域热力图,vue3高德地图api加载热力图及关闭,接收热力图数据并渲染热力图,关掉热力图,Vue使用高德API制作热力图,热力图加载不出来,电子围栏围住热力图,vue3中使用高德地图渲染热力图组件,高德地图使用热力图详细教程,报错,卡顿,出不来怎么办,无法关闭,怎么解决这个问题,出错,城市名称,城市某个街道,城区,省份,市区,县城,乡镇,村,各省份的热力图,交通流量,人口流量,密度,旅游出行,人口数量,颜色介绍,深浅

✅ 精选推荐文章 5205

【四足机器人项目实战】cheetah 3/mini运动控制工程解读(附C++代码)

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录系列文章目录前言一、主程序入口1.代码流程2.终端设置信息提示二、用MiniCheetahHardwareBridge类构造一个hw的对象并初初始化1.2.3.4.三、运行硬件桥驱动【MiniCheetahHardwareBridge】1.2.3.4.四、1.2.3.4.总结参考资料 前言 认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长! 本文先对cheetah3/m

qq_35635374的博客 2617

2021-08-01

缺失的第一个正数 给你一个未排序的整数数组 nums ,请你找出其中没有出现的最小的正整数。 请你实现时间复杂度为 O(n),并且只使用常数级别额外空间的解决方案。 本题如果不要求使用常数级别额外空间,我们可以简单的遍历数组,并使用哈希表存储每个正整数然后再找出第一个没有出现的正整数。 进一步考虑,我们使用哈希表的原因在于哈希表能够存储元素位置和值的关系,基于此,我们发现我们也可以利用自身的数组来做这件事, 具体方式为将值x放在数组的x-1处,然后从头遍历,找到第一个num[i]!=i-1的值即可

weixin_44959058的博客 424

2021-10-29【微生物】丨基于qiime2工具16S/ITS分析全套流程(上)

目录摘要工具与方法使用命令结果展示总结二级目录三级目录 摘要 前两个月项目特别多,最近终于有机会闲下来写点文章,把之前搭建的流程梳理一遍。前同事分析16S/ITS使用的qiime1,我接手后感觉不太适应,希望能够使用新版本来搭建,于是花了几天时间重新搭了这个流程, 工具与方法 使用工具:qiime2 使用版本:qiime2-2021.4 参考文档:https://docs.qiime2.org/2021.4/(最新版本2021.8) 使用命令 在这里插入代码片 结果展示 总结 二级目录 三级目录 ...

1万+

二叉树非递归使用常数存储空间遍历

主要使用了一个方向值orien,记录在二叉树中搜索时的路径方向,比如由父节点到左子树时orien值为1,这样按照严格的行走规则,在一个while循环里就能遍历整棵树。    一个简单的例子:    一棵树为:            8                  4             12              2       6     10       14             1 3     5 7   9  11   13  15    那么程序将采用一个相当于后序遍历的顺序对树

nkorange的专栏 1187

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

二叉树的Morris遍历(常数空间复杂度)、二叉树的非递归遍历(使用栈)

待完成

qq_53198408的博客 361

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

二叉树中序遍历(无递归无栈,常数空间复杂度)

原文地址:http://blog.youkuaiyun.com/fisher_jiang/archive/2008/06/01/2437714.aspx原文的算法描述和代码注释看了半天才明白,因此我把代码注释按我自己的理解改了改: void InOrder2(Node *T) { if (T == NULL) { return; } // 算法关键: // 1. 如果走到了结点p的左/右子树,就把p的左/右子结点指针指向p的父结点,用于回溯。 /

windless0530的专栏 2164

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

二叉树遍历

morris遍历二叉树, 做到消耗空间为o(1): 思路: 当前结点cur [1] 如果当前结点没有左孩子, cur = cur -> right; [2] 如果当前结点有左孩子, 找到左子树的最右结点 mostRight, 如果 [2.1] mostRight.right == cur, 这表示当前是第二次访问cur结点, 表示cur的左子树全部遍历完毕. 接着...

JIANG_RZJ的博客 214

数据结构《10》----二叉树 Morris 中序遍历

无论是二叉树的中序遍历还是用 stack 模拟递归, 都需要 O(n)的空间复杂度。 Morris 遍历是一种 常数空间 的遍历方法,其本质是 线索二叉树(Threaded Binary Tree), 本质上其实就是利用二叉树中 n+1 个指向NULL的指针。 关于 线索二叉树 见 http://blog.youkuaiyun.com/shoulinjun/article/details/19037819

L.J.SHOU的专栏 6635

算法刷题打卡第25天:二叉树的前序遍历---Morris 遍历

二叉树的前序遍历 难度:简单 给你二叉树的根节点 root ,返回它节点值的前序遍历。

weixin_45616285的博客 163

算法刷题打卡第26天:二叉树的后序遍历---Morris 遍历

二叉树的后序遍历 难度:简单 给你一棵二叉树的根节点 root ,返回其节点值的后序遍历 。

weixin_45616285的博客 392

算法学习13: Morris遍历

Morris遍历 树常见的非递归遍历方法,其空间复杂度均为O(h)h为树的高度 Morris遍历做到了 使遍历过程的空间复杂度 真的降低为O(1) 其思路: 利用树的空闲的空间(如,叶节点指向的虽为null,但是在内存中依旧为其分配了空间) morries遍历步骤 ...

ncepu_Chen的博客 651

Morris 遍历一颗树, 前序中序

理解 Morris 遍历的原理需要一些对二叉树的基本概念和指针操作的了解。让我们详细解释 Morris 前序遍历的原理。

m0_62856417的博客 199

Morris遍历详解——实现二叉树的前序,中序遍历

Morris遍历 Morris遍历是指在线性时间内,利用空闲指针只占用常数空间来实现遍历,其主要思路如下 记当前节点指针为cur 1,若cur无左树,则cur=cur.right 2,若cur有左树,则找到其最右节点mostright,分为两种情况 (a)若mostright的右指针为空,则指向当前节点,cur左移 mostright.right=cur; cur=cur.left; (b)若mostright的右指针指向当前cur,则说明第二次访问,又指回空,cur右移 mostright.right=

weixin_43748318的博客 509

不使用栈把二叉树中序输出

问题: 把一个二叉树中序输出,但是不能使用栈或者O(n)空间来实现。 分析: 把二叉树中序输出,我们可以使用递归或者采用非递归方式,但是不管是哪种方式,我们总是需要O(n)的空间,所以如果只能使用常数空间,的确很难想到,但是一旦掌握该种方法,还是挺有用的,至少拓宽了自己解决问题的思路。 对于中序遍历,我们总是先输出左子树部分,再root,最后才是右子树部分。对于左子树和右子

Yuwen's Hero 2008

中序遍历的三种方式(递归,非递归,非递归常数空间)

目录 1.递归:思路与算法 2.非递归(使用栈来模拟递归):思路与算法 3.非递归的常数空间:思路与算法 1.递归:思路与算法 首先我们需要了解什么是二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过程天然具有递归的性质,我们可以直接用递归函数来模拟这一过程。 class Solution { public List<Integer> middleTraversa.

lovekjl的博客 4011

二叉树遍历 Morris O(1)空间复杂度

本文主要解决一个问题,如何实现二叉树的前中后序遍历,有两个要求: 1. O(1)空间复杂度,即只能使用常数空间; 2. 二叉树的形状不能被破坏(中间过程允许改变其形状)。 通常,实现二叉树的前序(preorder)、中序(inorder)、后序(postorder)遍历有两个常用的方法:一是递归(recursive),二是使用栈实现的迭代版本(stack+iterativ

缘故的博客 5608
上一篇: 快速判断互质——浅析
下一篇: 转:waveOutReset的N种死法, 及其解决方案
KWHOK
博客等级 码龄20年 6粉丝 5原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值