[Leetcode][第116 117题][JAVA][填充每个节点的下一个右侧节点指针][BFS][链表前驱节点]

【问题描述】[中等]

在这里插入图片描述
在这里插入图片描述

【解答思路】

1. BFS层次遍历思想 (通用)

时间复杂度:O(N) 空间复杂度:O(N)

    public Node connect(Node root) {if (root == null)return root;Queue<Node> queue = new LinkedList<>();queue.add(root);while (!queue.isEmpty()) {//每一层的数量int levelCount = queue.size();//前一个节点Node pre = null;for (int i = 0; i < levelCount; i++) {//出队Node node = queue.poll();//如果pre为空就表示node节点是这一行的第一个,//没有前一个节点指向他,否则就让前一个节点指向他if (pre != null) {pre.next = node;}//然后再让当前节点成为前一个节点pre = node;//左右子节点如果不为空就入队if (node.left != null)queue.add(node.left);if (node.right != null)queue.add(node.right);}}return root;}
2. 链表思想

117

在这里插入图片描述
时间复杂度:O(N) 空间复杂度:O(1)

    public Node connect(Node root) {if (root == null)return root;//cur我们可以把它看做是每一层的链表Node cur = root;while (cur != null) {//遍历当前层的时候,为了方便操作在下一//层前面添加一个哑结点(注意这里是访问//当前层的节点,然后把下一层的节点串起来)Node dummy = new Node(0);//pre表示访下一层节点的前一个节点Node pre = dummy;//然后开始遍历当前层的链表while (cur != null) {if (cur.left != null) {//如果当前节点的左子节点不为空,就让pre节点//的next指向他,也就是把它串起来pre.next = cur.left;//然后再更新prepre = pre.next;}//同理参照左子树if (cur.right != null) {pre.next = cur.right;pre = pre.next;}//继续访问这一行的下一个节点cur = cur.next;}//把下一层串联成一个链表之后,让他赋值给cur,//后续继续循环,直到cur为空为止cur = dummy.next;}return root;}

116

在这里插入图片描述

时间复杂度:O(N) 空间复杂度:O(1)

    public Node connect(Node root) {if (root == null)return root;//cur我们可以把它看做是每一层的链表Node cur = root;while (cur != null) {//遍历当前层的时候,为了方便操作在下一//层前面添加一个哑结点(注意这里是访问//当前层的节点,然后把下一层的节点串起来)Node dummy = new Node(0);//pre表示下一层节点的前一个节点Node pre = dummy;//然后开始遍历当前层的链表//因为是完美二叉树,如果有左子节点就一定有右子节点while (cur != null && cur.left != null) {//让pre节点的next指向当前节点的左子节点,也就是把它串起来pre.next = cur.left;//然后再更新prepre = pre.next;//pre节点的next指向当前节点的右子节点,pre.next = cur.right;pre = pre.next;//继续访问这一行的下一个节点cur = cur.next;}//把下一层串联成一个链表之后,让他赋值给cur,//后续继续循环,直到cur为空为止cur = dummy.next;}return root;}

117的思路

时间复杂度:O(N) 空间复杂度:O(1)

    public Node connect(Node root) {if (root == null)return null;Node pre = root;Node cur = null;while (pre.left != null) {//遍历当前这一层的结点,然后把他们的下一层连接起来cur = pre;//cur不为空,就表示这一层还没遍历完,就继续循环while (cur != null) {//让下一层的左子节点指向右子节点cur.left.next = cur.right;//如果cur.next不为空,就表示还没遍历到这一层//最后的那个节点的右子节点,就让前一个结点的右//子节点指向下一个节点的左子节点if (cur.next != null)cur.right.next = cur.next.left;//然后继续连接下一个节点的 子节点cur = cur.next;}//继续下一层pre = pre.left;}return root;}
作者:sdwwld
链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/solution/bfshe-di-gui-zui-hou-liang-chong-ji-bai-liao-100-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

递归思路

    public Node connect(Node root) {dfs(root, null);return root;}private void dfs(Node curr, Node next) {if (curr == null)return;curr.next = next;dfs(curr.left, curr.right);dfs(curr.right, curr.next == null ? null : curr.next.left);}作者:sdwwld
链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/solution/bfshe-di-gui-zui-hou-liang-chong-ji-bai-liao-100-2/

【总结】

1. BFS套路 队列
2.重新加深了对链表的认视 前驱节点是个好东西
3.二叉树的遍历有

前序遍历
中序遍历
后续遍历
深度优先搜索(DFS)
宽度优先搜索(BFS)

转载链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node-ii/solution/bfsjie-jue-zui-hao-de-ji-bai-liao-100de-yong-hu-by/
转载链接:https://leetcode-cn.com/problems/populating-next-right-pointers-in-each-node/solution/bfshe-di-gui-zui-hou-liang-chong-ji-bai-liao-100-2/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424649.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows Server2012 R2 无法安装.NET Framework 3.5的解决方法

Windows server 2012R2&#xff0c;自带的是.NET Framework 4.5,如果想装SQL server2008或者SQL server2012就需要安装 .ENT Framework 3.5或者2.0的版本&#xff0c;建议安装 .NET3.5 版本&#xff0c;我本人亲测过&#xff0c;成功了&#xff01; 安装不成功错误分析&#x…

第三十五期:网络爬虫是啥玩意儿?有什么用呢?

在这个用数据说话的时代&#xff0c;数据是一件极其重要的事情&#xff0c;怎样才能抓取到完整以及全面的数据呢&#xff1f;这并不是一件容易的事情。 作者&#xff1a;呦呦科学馆 如果想要做好大数据的分析&#xff0c;单单依靠一己之力或者是周边的数据是远远不够的&#x…

121 Best Time to Buy and Sell Stock

输入&#xff1a;一个数组prices,prices[i]表示第i天股票的价格。 输出&#xff1a;买卖股票的最大收益。 规则&#xff1a;只允许最多买一次&#xff0c;最多卖一次股票。如果觉得价格不合适&#xff0c;可以不买卖。 分析1&#xff1a;最先想到的是暴力搜索&#xff0c;每天都…

第三十六期:学 Java 网络爬虫,需要哪些基础知识?

说起网络爬虫&#xff0c;大家想起的估计都是 Python &#xff0c;诚然爬虫已经是 Python 的代名词之一&#xff0c;相比 Java 来说就要逊色不少。有不少人都不知道 Java 可以做网络爬虫&#xff0c;其实 Java 也能做网络爬虫而且还能做的非常好&#xff0c;在开源社区中有不少…

前端之盒子模型

CSS之盒子模型 margin: 用于控制元素与元素之间的距离&#xff1b;margin的最基本用途就是控制元素周围空间的间隔&#xff0c;从视觉角度上达到相互隔开的目的。padding: 用于控制内容与边框之间的距离&#xff1b;Border(边框): 围绕在内边距和内容外的边框。Content(内容): …

[Leetcode][第977题][JAVA][有序数组的平方][排序][双指针]

【问题描述】[简单] 【解答思路】 1. 排序 平方后排序 没有使用排序的特性 时间复杂度&#xff1a;O(NlogN) 空间复杂度&#xff1a;O(1) class Solution {public int[] sortedSquares(int[] A) {int[] ans new int[A.length];for (int i 0; i < A.length; i) {ans[i] …

开始《数据机构与算法之美》之旅

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 还在学算法&#xff0c;就像还在学英语一样悲催。想想自己为什么要学算法。学&#xff0c;是为了用。学了&#xff0c;能理解Java API提供的接口和数据结构的实现方式…

第三十七期:为什么2019年人工智能算法岗求职竞争如此激烈?

在各公司全面数据化智能化的当下&#xff0c;算法岗本该更受青睐&#xff0c;为何突然成了就业重灾区?除了暴力劝退&#xff0c;本文将从几个不同角度来分析当前算法岗的求职就业情况。 作者&#xff1a;皮皮鲁的AI星球 与前几年媒体报道的人工智能毕业生高薪难求形成鲜明对比…

[LeetCode] 141. Linked List Cycle 单链表判圆算法

TWO POINTER 快指针速度2 &#xff0c; 慢指针速度1 相对速度1&#xff0c;有环必然相遇 public class Solution {public boolean hasCycle(ListNode head) {ListNode fast head,slow head;while(fast!null && fast.next!null){slow slow.next;fast fast.next.next…

[Bugku][Web][CTF] 9-15 write up

【说明】 整合资源 简略版本2020Bugku write up Bugku Web第九题 关键字 &#xff1a;/?argsGLOBALS PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问&#xff0c;也可以直接用来更新全局变量。 Web 第十题…

第三十八期:用Git帮助写作者更好地完成工作

如果你是一名写作者&#xff0c;你也能从使用 Git 中受益。在我们的系列文章中了解有关 Git 鲜为人知的用法。 作者&#xff1a;佚名 如果你是一名写作者&#xff0c;你也能从使用 Git 中受益。在我们的系列文章中了解有关 Git 鲜为人知的用法。 Git 是一个少有的能将如此多的…

报错

报错 报错&#xff1a; 2019-05-31 11:38:42.645 WARN 18756 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type: class net.a…

[Bugku][Web][CTF] 16-29 write up

【说明】 整合资源 简略版本2020Bugku write up web16 备份是个好习惯 /index.php.bak 查看php代码 1.因为md5&#xff08;&#xff09;函数加密不能处理数组&#xff0c;则key1和key2的返回值为空&#xff0c;即可获得flag http://123.206.87.240:8002/web16/?kkeyey1[]1&am…

数据结构一—— 数组

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 如何实现随机访问 数组是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来存储一组具有相同类型的数据。 线性表 线性表的数据最多只有前和后两个方向。…

第三十九期:1024特别版:向“程序媛们”致敬!

对女性程序员而言&#xff0c;似乎怎么选择都是错&#xff1a;闯入男性领地&#xff0c;输了&#xff0c;会强化社会对女性的固有刻板印象&#xff1b;赢了&#xff0c;打破了职业性别固化&#xff0c;会导致整个职业收入的下降。 作者&#xff1a;奇点、轻音 “到家得十二点半…

django-中间件

1.django中间件的5个方法 process_request(self,request) process_view(self, request, callback, callback_args, callback_kwargs) process_template_response(self,request,response) process_exception(self, request, exception) process_response(self, request, respons…

第四十期:十年生死两茫茫,Linux QQ突然复活!

就在 1024 将将过去的深夜&#xff0c;突然&#xff0c;有人在 QQ 群内丢了一个链接和一句话“Linux QQ 发布了”&#xff0c;顿时在静悄悄的 QQ 群内&#xff0c;大家纷纷冒了出来。一时间&#xff0c;群内就和开了锅一样热闹&#xff0c;大家纷纷抄起心爱的土琵琶 Linux&…

数据结构二——链表

文章出处&#xff1a;极客时间《数据结构和算法之美》-作者&#xff1a;王争。该系列文章是本人的学习笔记。 底层存储 数组&#xff1a;一块连续的内存空间。 链表&#xff1a;用指针串起来的一组零散的内存空间。 链表分类&#xff1a;单链表、双向链表、循环链表 单链表…

[Bugku][Web][CTF] 30-33 write up

【说明】 整合资源 简略版本2020Bugku write up web30 关键字&#xff1a; txt or file_get_contents(fn)知识点&#xff1a;filegetcontents(fn) 知识点&#xff1a; file_get_contents(fn)知识点&#xff1a;fileg​etc​ontents(fn) 联想 php://input 步骤&#xff1a; 1.1…

UML作业第五次:分析系统,绘制状态图

一. PlantUML状态图 语法学习小结 1.简单状态 我们使用[*]开始和结束状态图&#xff0c;使用-->添加箭头。 startuml [*] --> Test1 Test1 --> [*] Test1 : this is a test Test1 : this is another testTest1 -> Test2 Test2 --> [*] enduml 2.更改状态渲染 我…