放假不学习/上班,学习不放假。放假当然是不能学习或工作啦。所以只能工作期间认真工作了~ 力扣这个狗东西,竟然还有题目变形。我不想做,嘤嘤嘤,但是我开启了他的刷题,就不想停下来。
变形
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回其层次遍历结果:
[ [3], [9,20], [15,7] ]
思路
他变形的目的是为了分层输出,那分层自然是用隔板隔开,运行大概是这样的(因为我实在想不出怎么用静态的语言描述,所以画了图)
代码
package ForteenDay;
import java.util.ArrayList;
import java.util.List;
import elevDay.JZ32;
import elevDay.TreeNode;
public class Of32 {
public List> levelOrder(TreeNode root) {
ArrayList> l1 = new ArrayList>();
ArrayList> l2 = new ArrayList>();
//如果头节点不为空
if (root!=null) {
List list = new ArrayList();
list.add(root);
l1.add(list);
}
//若头结点列表不为空
while(l1.size()>0) {
//当前节点层不为空
List list = new ArrayList();
//弹出的节点加入最终列表
List list2 = new ArrayList();
while (l1.get(0).size()>0) {
if (l1.get(0).get(0).left!=null) {
list.add(l1.get(0).get(0).left);
}
if(l1.get(0).get(0).right!=null) {
list.add(l1.get(0).get(0).right);
}
list2.add(l1.get(0).get(0).val);
l1.get(0).remove(0);
}
if (list2.size()>0) {
l2.add(list2);
}
if (list.size()>0) {
l1.add(list);
}
l1.remove(0);
}
return l2;
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(8);
TreeNode node2 = new TreeNode(6);
TreeNode node3 = new TreeNode(10);
TreeNode node4 = new TreeNode(2);
TreeNode node5 = new TreeNode(1);
node1.left = node2;
node1.right = node3;
node3.left = node4;
node3.right = node5;
Of32 of32 = new Of32();
of32.levelOrder(node1);
}
}



