leetcode每日一题汇总
117. 填充每个节点的下一个右侧节点指针 II(中等)
考察层序遍历
安安:层序遍历
class Solution {
public Node
connect(Node root
) {
if(root
== null
) return null
;
Queue
<Node> queue
= new LinkedList<>();
queue
.offer(root
);
while(!queue
.isEmpty()){
int n
= queue
.size();
Node pre
= null
;
for(int i
= 0; i
< n
; i
++){
if(i
== 0){
pre
= queue
.poll();
if(pre
.left
!= null
) queue
.offer(pre
.left
);
if(pre
.right
!= null
) queue
.offer(pre
.right
);
}else{
Node node
= queue
.poll();
pre
.next
= node
;
pre
= node
;
if(node
.left
!= null
) queue
.offer(node
.left
);
if(node
.right
!= null
) queue
.offer(node
.right
);
}
}
pre
.next
= null
;
}
return root
;
}
}
官解:自己代码的优化,将每一层的第一个节点和其他节点一起考虑
class Solution {
public Node
connect(Node root
) {
if(root
== null
) return null
;
Queue
<Node> queue
= new LinkedList<>();
queue
.offer(root
);
while(!queue
.isEmpty()){
int n
= queue
.size();
Node pre
= null
;
for(int i
= 0; i
< n
; i
++){
Node node
= queue
.poll();
if(pre
!= null
){
pre
.next
= node
;
}
pre
= node
;
if(node
.left
!= null
) queue
.offer(node
.left
);
if(node
.right
!= null
) queue
.offer(node
.right
);
}
}
return root
;
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-6568.html