【每日一题】填充每个节点的下一个右侧节点指针 II

这篇具有很好参考价值的文章主要介绍了【每日一题】填充每个节点的下一个右侧节点指针 II。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Tag

【BFS】【树】【2023-11-03】


题目来源

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

【每日一题】填充每个节点的下一个右侧节点指针 II,LeetCode每日一题,BFS,树,2023-11-03

题目解读

为二叉树中的每一个节点填充下一个节点。


解题思路

方法一:BFS

本题题目意思明确,我们只需要遍历二叉树每一层的节点,将节点的 next 指针指向同一层的下一个节点即可,属于二叉树层序遍历的基础题。

实现代码

/*
// Definition for a Node.
class Node {
public:
    int val;
    Node* left;
    Node* right;
    Node* next;

    Node() : val(0), left(NULL), right(NULL), next(NULL) {}

    Node(int _val) : val(_val), left(NULL), right(NULL), next(NULL) {}

    Node(int _val, Node* _left, Node* _right, Node* _next)
        : val(_val), left(_left), right(_right), next(_next) {}
};
*/

class Solution {
public:
    Node* connect(Node* root) {
        if (root == NULL) return root;

        queue<Node*> que;
        que.push(root);

        Node* currNode, *prevNode;
        while (!que.empty()) {
            int size = que.size();
            for (int i = 0; i < size; ++i) {
                if (i == 0) {
                    prevNode = que.front(); que.pop();
                    currNode = prevNode;
                }
                else {
                    currNode = que.front(); que.pop();
                    prevNode->next = currNode;
                    prevNode = prevNode->next;
                }
                if (currNode->left) que.push(currNode->left);
                if (currNode->right) que.push(currNode->right);
            }
        }
        return root;
    }
};

复杂度分析

时间复杂度: O ( N ) O(N) O(N) N N N 为树上的节点数。

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

其他语言

python3

"""
# Definition for a Node.
class Node:
    def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
"""

class Solution:
    def connect(self, root: 'Node') -> 'Node':
        if root is None:
            return root
        
        queue = deque([root])
        while queue:
            n = len(queue)
            last = None
            for _ in range(n):
                cur = queue.popleft()
                if cur.left:
                    queue.append(cur.left)
                if cur.right:
                    queue.append(cur.right)
                if last:
                    last.next = cur
                last = cur
        return root

写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。文章来源地址https://www.toymoban.com/news/detail-743045.html

到了这里,关于【每日一题】填充每个节点的下一个右侧节点指针 II的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • leetcode做题笔记116. 填充每个节点的下一个右侧节点指针

    给定一个  完美二叉树  ,其所有叶子节点都在同一层,每个父节点都有两个子节点。二叉树定义如下: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为  NULL 。 初始状态下,所有 next 指针都被设置为  NULL 。

    2024年02月10日
    浏览(31)
  • 力扣:117. 填充每个节点的下一个右侧节点指针 II(Python3)

    给定一个二叉树: 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为  NULL  。 初始状态下,所有 next 指针都被设置为  NULL  。 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 示

    2024年02月07日
    浏览(31)
  • 【教3妹学编程-算法题】117. 填充每个节点的下一个右侧节点指针 II

    2哥 : 3妹,听说你昨天去面试了,怎么样啊? 3妹 :嗨,别提了,让我回去等通知,估计是没有通知了, 还浪费我请了一天假。 2哥 : 你又请假了啊, 你是怎么跟你那个严厉的老板请假的。 3妹 :我说我2哥生病了,嘿嘿~ 2哥 :一猜就是说我生病了,自从你找工作,我这一年

    2024年02月05日
    浏览(31)
  • 117.填充每个节点的下一个右侧节点 II

    ​​ 题目来源:         leetcode题目,网址:117. 填充每个节点的下一个右侧节点指针 II - 力扣(LeetCode) 解题思路:        按层遍历时修改 next 指针即可,每一层除最后一个元素 的next 指针指向空外,皆指向同层下一个元素。 解题代码: 总结:         官方题解给出了

    2024年02月06日
    浏览(30)
  • 随想录刷题笔记 —二叉树篇3 117填充每个节点的下一个右侧节点指针II 104二叉树最大深度 111二叉树最小深度

    和116的区别在于116是完美二叉树,而117中的结点并非左右子结点都存在。 解法一:队列 解法二:双循环代替队列 解法一:队列 使用depth标记深度,进行层序遍历,每遍历完一层,depth+1 解法二:递归 递归出口:传入结点为空,返回0 否则返回左子结点和右子结点返回值的最

    2024年02月19日
    浏览(34)
  • LeetCode每日一题 1019. 链表中的下一个更大节点 --单调栈

      Halo,这里是Ppeua。平时主要更新C语言,C++,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接       我会一直往里填充内容哒! 🌈LeetCode专栏:专栏链接       目前在刷初级算法的LeetBook 。若每日一题当中有力所能

    2024年02月01日
    浏览(35)
  • 每日一题——LeetCode1299.将每个元素替换为右侧最大元素

    方法一 个人方法:  题目意思就是求在i=1;i++的循环条件下,arr[i]-arr[arr.length-1]的最大值分别为多少,最后一项默认为-1 用slice方法可以每次把数组第一位去除,得到求最大值的目标数组 Math的max方法可以直接返回数组里的最大值 但是不能每次循环都求一遍目标数组的最大值,

    2024年01月23日
    浏览(47)
  • (链表) 剑指 Offer 52. 两个链表的第一个公共节点 ——【Leetcode每日一题】

    难度:简单 输入两个链表,找出它们的第一个公共节点。 如下面的两个链表: 在节点 c1 开始相交。 示例 1: 输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3 输出:Reference of the node with value = 8 输入解释:相交节点的值为 8 (注意,如果两个列表相交则

    2024年02月15日
    浏览(35)
  • LeetCode·每日一题·1851. 包含每个查询的最小区间·优先队列(小顶堆)

        离线查询:  输入的结果数组queries[]是无序的。如果我们按照输入的queries[]本身的顺序逐个查看,时间复杂度会比较高。 于是,我们将queries[]数组按照数值大小,由小到大逐个查询,这种方法称之为离线查询。 位运算:  离线查询的时候,queries[]可以按照数值大小逐个

    2024年02月16日
    浏览(40)
  • 面试算法53:二叉搜索树的下一个节点

    给定一棵二叉搜索树和它的一个节点p,请找出按中序遍历的顺序该节点p的下一个节点。假设二叉搜索树中节点的值都是唯一的。例如,在图8.9的二叉搜索树中,节点8的下一个节点是节点9,节点11的下一个节点是null。 解决这个问题的最直观的思路就是采用二叉树的中序遍历

    2024年02月06日
    浏览(24)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包