首页 > 其他分享 >4月17日leetcode二叉树的层序遍历II

4月17日leetcode二叉树的层序遍历II

时间:2023-04-17 21:58:08浏览次数:40  
标签:结点 遍历 17 层序 vector 二叉树 prev 节点

给你二叉树的根节点 root ,返回其节点值 自底向上的层序遍历 。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)(出自力扣)

这个昨天的二叉树的层序遍历有所不同:需要将从后往前层序遍历二叉树,其实很简单,只需要用vector的逆置函数,将vector中的vector逆置即可。

这里顺便理一下昨天这道题的思路;首先使用队列层序遍历二叉树,在此基础上利用队列的大小和一个内循环控制队列出数据到一个一维的vector中。最后将每次的一维vector尾插到二维的vector中。

链接:https://www.nowcoder.com/questionTerminal/947f6eb80d944a84850b0538bf0ec3a5?
来源:牛客网

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示

数据范围:输入二叉树的节点数 0≤n≤10000 \le n \le 10000≤n≤1000,二叉树中每个节点的值 0≤val≤10000\le val \le 10000≤val≤1000
要求:空间复杂度O(1)O(1)O(1)(即在原树上操作),时间复杂度 O(n)O(n)O(n)

 题目分析:将二叉搜索树转化为一个排序的双向链表,因为二叉搜索树的中序遍历输出就是一个升序的排序结果,于是可以将前一个结点保留,用前一个结点的right链接当前节点,当前结点的left链接前一个结点,那么就可以用递归的思路搞定他,

1:首先为了方便递归,需在主函数里将前一个结点传给子函数,使子函数可以递归下去。

2:先将prev结点置为空,因为双向链表的头节点的prev指向空,因为是中序遍历所以在子函数中先递归此结点的左子树,然后对此节点进行操作,若prev不为空,就让prev的right指向此结点,再让此结点的left指向prev,当进入下一个节点时此时的root就会变为下一个节点的prev所以不用考虑,此结点与下一个结点的连接问题,

3:递归完成后返回最初的根节点,但这个根节点不是双向链表的头节点,所以要让此结点向左子树迭代直到找到头结点返回头结点为止,

其中需要注意的是在prev的传参过程中虽然他是指针但是也需要传引用,因为每次改变的时这个指针变量中存·的地址,而不是prev中地址的指向,所以可以理解为传的是形参,而形参在递归过程中的改变随着递归的返回也会消失,所以prev在此时需要传引用或者二级指针。

 

标签:结点,遍历,17,层序,vector,二叉树,prev,节点
From: https://www.cnblogs.com/qjwxlj/p/17327632.html

相关文章

  • 4/17c++练习打卡
    #include<iostream>usingnamespacestd;classCounter{friendCounter&operator+(constCounter&a,constCounter&b);intnum;public:Counter(){num=0;}Counter(intnum_):num(num_){}//Counteroperator+......
  • LeetCode Top100: 二叉树的最大深度 (python)
     给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7],3/\920/\157返回它的最大深度 3。 以下是Python代码实现:cl......
  • 4.17每日总结
    昨天完成了图像识别的初步筛选。今天将完成所有筛选,并且将微信截图与小票分别开,并且显示店铺。难点小票识别检测出店铺。 下面/*importjava.io.BufferedReader;importjava.io.DataOutputStream;importjava.io.FileInputStream;importjava.io.IOException;importjava.i......
  • 2023 4 17
    1#include<iostream>2#include<math.h>3usingnamespacestd;4voidprint(ints[]);5intjudge(intc[]);6intj=0;7intmain(){8intsweet[10]={10,2,8,22,16,4,10,6,14,20};9inti,t[10],l;10cout<<"child......
  • 2023.4.17软工日报
    今天上午写代码,下午上建民的课。我们进行了小组讨论。晚上完善了建民说的科技政策。按发布时间排序,还有名称省略。 鼠标放上去,可以查看全名字。 点击可以查看整个政策信息。 ......
  • 4月16日leetcode二叉树前序遍历创建字符串,二叉树的层序遍历
    给你二叉树的根节点root,请你采用前序遍历的方式,将二叉树转化为一个由括号和整数组成的字符串,返回构造出的字符串。空节点使用一对空括号对"()"表示,转化后需要省略所有不影响字符串与原始二叉树之间的一对一映射关系的空括号对。来源:力扣(LeetCode)链接:https://leetcode.cn/pro......
  • 20230417小记
    感觉每天开一个还是太麻烦了()应该会合并一下。20230417闲话感觉有点找到状态了,虽然在某些时候会被打回原形。早上同桌换衣服了在操场上走了半圈没认出来。明天争取跑两圈()。什么时候能跑三圈啊(思索)想和同学打球了。感觉羽毛球太有意思了。就是说很喜欢一起的友好的感觉。菜也......
  • 2023.4.17编程一小时打卡
    一、问题描述:设计一款电子钟类,用于显示时、分、秒。实验要求:含有形参有默认值的默认构造函数;重载前缀++和后缀—用于调整时间,每次调整均对秒进行调整,若秒满60,则分加1,若分满60则时加1,时满24,则清零重新开始;重载插入运算符>>用于输入(设定)时间;重载插入运算符<<用于输出......
  • 面试题4-17
    操作系统的中断和异常有什么区别?中断是外部事件触发的,硬件设备发出的异步信号,用于向操作系统请求服务。中断事件发生时,会停止当前程序的运行,而转向中断处理程序的执行。在中断处理程序执行完成之后再回到原来的进程执行。异常是cpu执行指令的时候遇到的错误和意外情况,是cpu内......
  • 4月17日打卡
    #include<bits/stdc++.h>usingnamespacestd;inta[100010];intmain(){inti,j;intN;cin>>N;for(i=0;i<N;i++){cin>>a[i];}intt=0;for(i=1;i<=N-1;i++){for(j......