2020年9月28日 填充每个节点的下一个右侧节点指针 II connect
/*
// 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) {
}
}
解题思路:
在不考虑进阶的情况下,这道题的就提还是挺简单的,思路是这样的。
使用广度优先算法,广度优先算法的特点就在于我们可以以从上到下,从左到右顺序遍历二叉树,而且每一层之间是分开运算的。
具体流程是这样的,我们先取出根节点,将其放入一个队列中。
然后我们开始下面的这个循环规则。
获取队列的当前长度:1
循环取出该队列的前1个节点。
取出的节点的子节点加入队列。
上面的流程可以做到从上到下从左到右遍历二叉树。
我们在流程中添加一些步骤就能够做到遍历整棵树。
代码实现:
public Node connect(Node root) {
LinkedList<Node> list = new LinkedList<>();
if(null == root)
return root;
list.add(root);
while (list.size() != 0){
int size=list.size();
Node leftNode = null;
for (int i=0;i<size;i++){
Node nowNode = list.getFirst();
if (i == 0){
leftNode = nowNode;
}
else
{
leftNode.next = nowNode;
leftNode = nowNode;
}
if (null != nowNode.left)
list.add(nowNode.left);
if (null != nowNode.right)
list.add(nowNode.right);
list.removeFirst();
}
}
return root;
}