题目链接
思路一:队列+dfs,也就是层序遍历
分析:这个题要我们将每一层的节点都指向它自己右边的节点,很容易想到层序遍历,但是有个问题,在于每一层的最右边的节点的next指向的是null,那么如何知道当前节点是不是这一层的最后的一个节点。
解决:每次将这一层的所有节点从左至右全部放到队列中,那么最后一个就是最右边的节点。
代码:
class Solution {
public Node connect(Node root) {
if(root==null){
return root;
}
//队列
Queue<Node> queue = new LinkedList<>();
queue.add(root);
dfs(queue);
return root;
}
/**层序遍历每层节点 */
public void dfs(Queue<Node> queue){
//取出每一层最左边的节点
Node pre = queue.poll();
//用于保存下一层的节点
Queue<Node> afterQueue = new LinkedList<>();
//左子树
if(pre.left!=null){
afterQueue.add(pre.left);
}
//右子树
if(pre.right!=null){
afterQueue.add(pre.right);
}
//如果当前队列不为空,也就是这一层不止一个节点
while (!queue.isEmpty()){
//将前一个节点的next指针指向这一层的下一个节点
pre.next = queue.peek();
//pre指针
pre = queue.poll();
if(pre.left!=null){
afterQueue.add(pre.left);
}
if(pre.right!=null){
afterQueue.add(pre.right);
}
}
//下一层节点
if(!afterQueue.isEmpty()){
dfs(afterQueue);
}
}
}
好好学习。
不打扰是我的温柔。