广度优先搜索解法:
1.该题的解法主要在于给每层节点的下一个右侧节点来进行赋值,所以我们只要再没遍历到每层最后一个节点时都给之前弹出的节点赋上当前对列中队首的节点就解决了这题。
java
/*
// Definition for a Node.
class Node {
public int val;
public Node left;
public Node right;
public Node next;
public Node() {}
public Node(int _val) {
val = _val;
}
public Node(int _val, Node _left, Node _right, Node _next) {
val = _val;
left = _left;
right = _right;
next = _next;
}
};
*/
class Solution {
public Node connect(Node root) {
//判断root为零的情况
if(root==null){
return root;
}
//声明一个队列
Queue<Node> qu=new LinkedList<Node>();
//把root的根节点加入队列中
qu.offer(root);
//循环进队列和出队列
while(!qu.isEmpty()){
//获取队列中的长度
int size=qu.size();
//一层一层的遍历每层节点
for(int i=0;i<size;i++){
//弹出节点
Node j=qu.poll();
//当弹出的节点不是该层的最后一位节点时就进行来连接下一个右侧节点
if(i!=size-1){
j.next=qu.peek();
}
//进行弹出节点的下一层左节点的进队列操作
if(j.left!=null){
qu.offer(j.left);
}
//进行弹出节点的下一层右节点的进队列操作
if(j.right!=null){
qu.offer(j.right);
}
}
}
return root;
}
}