【LeetCode】每日一题 2023_11_3 填充每个节点的下一个右侧节点指针 II(质量不错)

文章目录

刷题前唠嗑


LeetCode? 启动!!!

题目:填充每个节点的下一个右侧节点指针 II

题目链接:117. 填充每个节点的下一个右侧节点指针 II

题目描述

代码与解题思路

go 复制代码
/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Left *Node
 *     Right *Node
 *     Next *Node
 * }
 */

func connect(root *Node) *Node {
	if root == nil {
        return nil
    }
    Queue := []*Node{root}
    for Queue != nil {
        tmp := Queue
        Queue = nil
        for i, node := range tmp {
            if i > 0 { // 层序过程中,连接一下指针
                tmp[i-1].Next = node
            }
            if node.Left != nil {
                Queue = append(Queue, node.Left)
            }
            if node.Right != nil {
                Queue = append(Queue, node.Right)
            }
        }
    }
    return root
}

最近刚好刷了不少层序遍历的题目,上手就是一套层序遍历模板框框拿下,直接在层序遍历的途中加一句:tmp[i-1].Next = node 把每一层需要连接的 Next 指针全部连上就行

不过这样做空间复杂度就是 O(N) 了,题目有个进阶要求,说要整 O(1) 的空间复杂度,有一说一,我想不出来咋做,他有提示说可以用递归来做,但是我递归水平一般,想不出什么好法子

偷学大佬题解

然后我去题解区偷学大佬题解了:

go 复制代码
/**
 * Definition for a Node.
 * type Node struct {
 *     Val int
 *     Left *Node
 *     Right *Node
 *     Next *Node
 * }
 */

func connect(root *Node) *Node {
	head := &Node{} // 哨兵位的头结点
    cur := root
    for cur != nil {
        head.Next = nil
        node := head
        for cur != nil { // 把下一层的 Next 都接上
            if cur.Left != nil {
                node.Next = cur.Left
                node = cur.Left
            }
            if cur.Right != nil {
                node.Next = cur.Right
                node = cur.Right
            }
            cur = cur.Next // 当前层的下一个节点(上一层的时候接上了)
        }
        cur = head.Next // 这里的设计非常巧妙,head.Next 是下一层的第一个节点
    }
    return root
}

他这个设计太巧妙了,将真个二叉树当成一个链表不断遍历,只设置了一个哨兵位的头结点来更方便的操作,最巧妙的操作就是 cur 和 head.Next 交接的设计,我反正是学不会啊,只能说长见识了,以后多学多练,希望有一天也能对这些牛逼的操作信手拈来

结语

今天周五了,刷个每日一题都开心起来了~

相关推荐
zhaoshuzhaoshu9 分钟前
人工智能(AI)发展史:详细里程碑
人工智能·职场和发展
cmpxr_10 分钟前
【C】数组名、函数名的特殊
c语言·算法
KAU的云实验台21 分钟前
【算法精解】AIR期刊算法IAGWO:引入速度概念与逆多元二次权重,可应对高维/工程问题(附Matlab源码)
开发语言·算法·matlab
会编程的土豆28 分钟前
【数据结构与算法】再次全面了解LCS底层
开发语言·数据结构·c++·算法
大熊背1 小时前
如何利用Lv值实现三级降帧
算法·自动曝光·lv·isppipeline
大尚来也2 小时前
驾驭并发:.NET多线程编程的挑战与破局之道
java·前端·算法
向阳而生,一路生花2 小时前
深入浅出 JDK7 HashMap 源码分析
算法·哈希算法
君义_noip2 小时前
信息学奥赛一本通 4150:【GESP2509七级】⾦币收集 | 洛谷 P14078 [GESP202509 七级] 金币收集
c++·算法·gesp·信息学奥赛·csp-s
摸个小yu2 小时前
【力扣LeetCode热题h100】链表、二叉树
算法·leetcode·链表
汀、人工智能2 小时前
[特殊字符] 第93课:太平洋大西洋水流问题
数据结构·算法·数据库架构·图论·bfs·太平洋大西洋水流问题