剑指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;

	}
    
}
posted @ 2018-07-26 21:17  LynnMin  阅读(122)  评论(0编辑  收藏  举报