影刀RPA教程:从零开发拼多多店群全自动运营软件,一人轻松管理400店(附系统架构)
2026/6/7 17:07:24
题目链接:填充每个节点的下一个右侧节点指针 II(LeetCode 117)
难度:中等
给你一个二叉树的根节点root,请你将其中所有节点的next指针指向其右侧的节点。如果没有右侧节点,则next指针应设置为NULL。
初始时,所有next指针都设置为NULL。
树节点定义:
classNode: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要求:
示例:
输入: root = [1,2,3,4,5,null,7] 输出: [1,#,2,3,#,4,5,7,#] 解释: 给定二叉树如图所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点。序列化的输出按层序遍历排列,同一层节点由 next 指针连接,'#' 标志着每一层的结束。输入: root = [] 输出: []next指针连接起来,形成一个链表。我们使用常量空间的层级连接方法:
dummy来构建下一层的链表头,并用tail指针来连接下一层的子节点。next指针),为每个节点的左右子节点建立连接:tail.next。tail.next。dummy.next,继续处理下一层。next指针来遍历当前层,避免使用队列,实现 O(1) 额外空间。classSolution:defconnect(self,root:'Node')->'Node':ifnotroot:returnroot head=rootwhilehead:dummy=Node(0)tail=dummy cur=headwhilecur:ifcur.left:tail.next=cur.left tail=tail.nextifcur.right:tail.next=cur.right tail=tail.nextcur=cur.nexthead=dummy.nextreturnrootclassSolution{public:Node*connect(Node*root){if(!root)returnroot;Node*head=root;while(head){Node*dummy=newNode(0);Node*tail=dummy;Node*cur=head;while(cur){if(cur->left){tail->next=cur->left;tail=tail->next;}if(cur->right){tail->next=cur->right;tail=tail->next;}cur=cur->next;}head=dummy->next;// 注意:在C++中,需要手动删除dummy以避免内存泄漏,但LeetCode环境可忽略}returnroot;}};dummy和tail,很通用。面试经典150题[014]:加油站(LeetCode 134)
面试经典150题[044]:两数之和(LeetCode 1)
面试经典150题[059]:合并两个有序链表(LeetCode 21)