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

【问题描述】[中等]

在这里插入图片描述

【解答思路】

1. 层次遍历
    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. 层次遍历改进

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

    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;}

【总结】

1. 二叉树的遍历8种

前序遍历
中序遍历
后续遍历
深度优先搜索(DFS)
宽度优先搜索(BFS)
除了上面介绍的5种以外,还有Morris(莫里斯)的前中后3种遍历方式,总共也就这8种。所以只要遇到二叉树相关的算法题,首先想到的就是上面的几种遍历方式,然后再稍加修改,基本上也就这个套路。

2.层次遍历模板
    public void levelOrder(TreeNode tree) {if (tree == null)return;Queue<TreeNode> queue = new LinkedList<>();queue.add(tree);//相当于把数据加入到队列尾部while (!queue.isEmpty()) {//poll方法相当于移除队列头部的元素TreeNode node = queue.poll();System.out.println(node.val);if (node.left != null)queue.add(node.left);if (node.right != null)queue.add(node.right);}}

转载链接: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/

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

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

相关文章

第二十八期:Java线程池的四种用法与使用场景

线程池的作用主要是为了提升系统的性能以及使用率。文章刚开始就提到&#xff0c;如果我们使用最简单的方式创建线程&#xff0c;如果用户量比较大&#xff0c;那么就会产生很多创建和销毁线程的动作&#xff0c;这会导致服务器在创建和销毁线程上消耗的性能可能要比处理实际业…

php连接mysql遇到的问题: (HY000/1130) 和 [caching_sha2_password]

说明一下我的mysql是安装在虚拟机上的 所以遇到的第一个问题就是访问问题 解决&#xff1a; update user set host % where user root; 重启mysql服务 试了很多方法&#xff0c;也找了很多方法只有这个可行。 问题2&#xff0c; 解决&#xff1a; https://www.cnblogs.com/un…

847. Shortest Path Visiting All Nodes(一)

输入&#xff1a;一个无向图&#xff0c;各个节点的标签是0、1、2…N-1。graph[i][j]表示从节点i到节点j有一条边。 输出&#xff1a;返回每个节点都访问一遍需要的最少步骤。 规则&#xff1a;各个节点可以重复访问。 分析&#xff1a;  如果可以知道从每个节点开始&#xf…

第二十九期:程序员们该如何破局!

我是实打实的程序员一枚&#xff0c;身为一个过来人&#xff0c;我觉得有必要说几点针对程序员们的破局思维&#xff0c;希望能解决不少人的迷茫与困惑。 作者&#xff1a;stormzhang 新读者可能不知道&#xff0c;老读者都晓得&#xff0c;虽说现在转身做了自媒体&#xff0c…

[Leetcode][第75题][JAVA][颜色分类][双(三)指针][计数排序]

【问题描述】[中等] 【解答思路】 1. 三指针 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(1) class Solution {public void sortColors(int[] nums) {int n nums.length;int p0 0, p2 n - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] …

第三十期:程序员报告:男性占比超87% 北京月薪12184元最高

1024“程序员节”&#xff0c;58同城招聘研究院发布程序员行业大数据报告显示&#xff0c;程序员男性占比高达87.29%。 作者&#xff1a;朝晖 1024“程序员节”&#xff0c;58同城招聘研究院发布程序员行业大数据报告显示&#xff0c;程序员男性占比高达87.29%&#xff0c;北…

[Leetcode][LCP 19][JAVA][秋叶收藏集][动态规划]

【问题描述】[中等] 【解答思路】 1. 动态规划 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) class Solution {public int minimumOperations(String leaves) {if (leaves null || leaves "") { // 排除 不合法参数情况return 0;}int length leave…

第三十一期:QQ for Linux 复活,微信 for Linux 还远吗?

网友通过分析龙芯处理器的生态支持计划与近期 QQ for Linux 支持 MIPS 架构的事实&#xff0c;结合当前国产自主研发的大背景&#xff0c;认为距离微信 for Linux 的发布也不远了。 10 月 24 日晚间&#xff0c;腾讯突然发布了沉寂多年的 QQ for Linux 新版本&#xff0c;引起了…

[Leetcode][第141、142题][JAVA][环形链表][哈希表][快慢指针][数学推理]

【问题描述】[中等] 【解答思路】 141 每次遍历到一个节点时&#xff0c;判断该节点此前是否被访问过。 具体地&#xff0c;我们可以使用哈希表来存储所有已经访问过的节点。每次我们到达一个节点&#xff0c;如果该节点已经存在于哈希表中&#xff0c;则说明该链表是环形链…

样式集合

box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.3);转载于:https://www.cnblogs.com/xmyd/p/10943567.html

[Leetcode][第1002题][JAVA][查找常用字符][计数][HashMap]

【问题描述】[简单] 【解答思路】 计数法 1. minfreq存放最终重复字母的个数 freq存放每次遍历字符串的字母个数 2. minfreq初始化最大值&#xff0c;每遍历一个字符串后&#xff0c;比较minfreq[i]、freq[i]的大小&#xff0c;minfreq[i]更新为两者的最小值。 3. 根据minf…

第三十三期:连接池中非常关键的两个参数,到底是干啥用的?

说来惭愧&#xff0c;从事互联网开发好些年了&#xff0c;有些概念一直没有彻底搞清楚。其中之一就是,ttp client配置连接池的时候,maxConnectionsPerHost,和maxTotalConnections,在网上搜了一圈&#xff0c;发现很多都讲的含含糊糊的。 作者&#xff1a;资深开发讲技术 背景 …

一个密码经过多次MD5加密能否提高安全性?Java MD5盐值加解密

什么是MD5? MD5&#xff08;Message Digest Algorithm 5&#xff0c;信息摘要算法5&#xff09;&#xff0c;是计算机广泛使用的摘要算法&#xff08;又称哈希算法&#xff09;之一。MD5是将一段信息&#xff0c;通过其不可逆的字符串变换算法&#xff0c;产生了唯一的MD5信息…

[Leetcode][第24题][JAVA][两两交还的链表中的节点][递归][三指针]

【问题描述】[中等] 【解答思路】 1. 递归 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) class Solution {public ListNode swapPairs(ListNode head) {if(head null || head.next null){return head;}ListNode next head.next;head.next swapPairs(next.next…

第三十四期:花了一个星期,我终于把RPC框架整明白了!

RPC(Remote Procedure Call)&#xff1a;远程过程调用&#xff0c;它是一种通过网络从远程计算机程序上请求服务&#xff0c;而不需要了解底层网络技术的思想。 作者&#xff1a;李金葵 RPC(Remote Procedure Call)&#xff1a;远程过程调用&#xff0c;它是一种通过网络从远…

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

【问题描述】[中等] 【解答思路】 1. BFS层次遍历思想 &#xff08;通用&#xff09; 时间复杂度&#xff1a;O(N) 空间复杂度&#xff1a;O(N) public Node connect(Node root) {if (root null)return root;Queue<Node> queue new LinkedList<>();queue.add(r…

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…

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

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

前端之盒子模型

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