剑指Offer--把二叉树打印成多行
题目 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行;
思路 运用两个辅助链表分别记录当前行,以及下一行的节点。
自己写的low代码
import java.util.ArrayList;
/*
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> nodesValue = new ArrayList<ArrayList<Integer>>();// 分行返回;
if (pRoot == null) {
return nodesValue;
}
ArrayList<TreeNode> currentLay = new ArrayList<TreeNode>();// 需要打印的层;
currentLay.add(pRoot);
ArrayList<TreeNode> nextLay = new ArrayList<TreeNode>();// 下一层;
while (!currentLay.isEmpty()) {
ArrayList<Integer> rows = new ArrayList<Integer>();
for (int i = 0; i < currentLay.size(); i++a) {
rows.add(currentLay.get(i).val);
System.out.print(currentLay.get(i).val + " ");
if (currentLay.get(i).left != null) { //注意判空;
nextLay.add(currentLay.get(i).left);
}
if (currentLay.get(i).right != null) { //注意判空;
nextLay.add(currentLay.get(i).right);
}
}
nodesValue.add(rows);
currentLay.clear();
currentLay.addAll(nextLay);
// rows.clear();//这里不用清空,否则没有结果输出;
nextLay.clear();
}
return nodesValue;
}
}
多思考,多尝试。