二叉树|116.填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II

2024-01-28 22:20

本文主要是介绍二叉树|116.填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

116.填充每个节点的下一个右侧节点指针

题目: 给定一个完美二叉树 ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下:

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}
填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。、
初始状态下,所有 next 指针都被设置为 NULL。
在这里插入图片描述

题目链接: 116.填充每个节点的下一个右侧节点指针
用层次遍历解决即可该代码可解决117的问题

//层次遍历
class Solution {public Node connect(Node root) {Queue<Node> myqueue=new LinkedList<>();if(root==null){return root;}myqueue.offer(root);while(!myqueue.isEmpty()){int num=myqueue.size();while(num>0){Node tempNode=myqueue.poll();if(tempNode.left!=null){myqueue.offer(tempNode.left);}if(tempNode.right!=null){myqueue.offer(tempNode.right);}if(num==1){tempNode.next=null;}else{tempNode.next=myqueue.peek();}num--;}}return root;}
}

完美二叉数的另一种解法(这里一定要注意是完美二叉树)
其他解法:同一个父亲的节点可以通过父节点链接 不同父亲的最左子节点和最右子节点通过父节点的next链接进行连接 最终的终止条件是节点的左节点不为空(说明到达最后一层)

class Solution {public Node connect(Node root) {if (root == null) {return root;}// 从根节点开始Node leftmost = root;while (leftmost.left != null) {// 遍历这一层节点组织成的链表,为下一层的节点更新 next 指针Node head = leftmost;while (head != null) {// CONNECTION 1head.left.next = head.right;// CONNECTION 2if (head.next != null) {head.right.next = head.next.left;}// 指针向后移动head = head.next;}// 去下一层的最左的节点leftmost = leftmost.left;}return root;}
}

117.填充每个节点的下一个右侧节点指针||

第二种解决方式 在当前层为下一层创建链表 到下一层是使用虚拟头节点->next获取下一层链表的节点 循环构建下一层的链表

class Solution {public Node connect(Node root) {Node dummy = new Node();Node cur = root;while (cur != null) {dummy.next = null;Node nxt = dummy; // 下一层的链表while (cur != null) { // 遍历当前层的链表if (cur.left != null) {nxt.next = cur.left; // 下一层的相邻节点连起来nxt = cur.left;}if (cur.right != null) {nxt.next = cur.right; // 下一层的相邻节点连起来nxt = cur.right;}cur = cur.next; // 当前层链表的下一个节点}cur = dummy.next; // 下一层链表的头节点}return root;}
}

这篇关于二叉树|116.填充每个节点的下一个右侧节点指针 117. 填充每个节点的下一个右侧节点指针 II的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654959

相关文章

go 指针接收者和值接收者的区别小结

《go指针接收者和值接收者的区别小结》在Go语言中,值接收者和指针接收者是方法定义中的两种接收者类型,本文主要介绍了go指针接收者和值接收者的区别小结,文中通过示例代码介绍的非常详细,需要的朋友们下... 目录go 指针接收者和值接收者的区别易错点辨析go 指针接收者和值接收者的区别指针接收者和值接收者的

Java Optional避免空指针异常的实现

《JavaOptional避免空指针异常的实现》空指针异常一直是困扰开发者的常见问题之一,本文主要介绍了JavaOptional避免空指针异常的实现,帮助开发者编写更健壮、可读性更高的代码,减少因... 目录一、Optional 概述二、Optional 的创建三、Optional 的常用方法四、Optio

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

解决java.lang.NullPointerException问题(空指针异常)

《解决java.lang.NullPointerException问题(空指针异常)》本文详细介绍了Java中的NullPointerException异常及其常见原因,包括对象引用为null、数组元... 目录Java.lang.NullPointerException(空指针异常)NullPointer

Go Mongox轻松实现MongoDB的时间字段自动填充

《GoMongox轻松实现MongoDB的时间字段自动填充》这篇文章主要为大家详细介绍了Go语言如何使用mongox库,在插入和更新数据时自动填充时间字段,从而提升开发效率并减少重复代码,需要的可以... 目录前言时间字段填充规则Mongox 的安装使用 Mongox 进行插入操作使用 Mongox 进行更

基于Java实现模板填充Word

《基于Java实现模板填充Word》这篇文章主要为大家详细介绍了如何用Java实现按产品经理提供的Word模板填充数据,并以word或pdf形式导出,有需要的小伙伴可以参考一下... Java实现按模板填充wor编程d本文讲解的需求是:我们需要把数据库中的某些数据按照 产品经理提供的 word模板,把数据

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

从0到1,AI我来了- (7)AI应用-ComfyUI-II(进阶)

上篇comfyUI 入门 ,了解了TA是个啥,这篇,我们通过ComfyUI 及其相关Lora 模型,生成一些更惊艳的图片。这篇主要了解这些内容:         1、哪里获取模型?         2、实践如何画一个美女?         3、附录:               1)相关SD(稳定扩散模型的组成部分)               2)模型放置目录(重要)