题目描述
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
算法思想
- 使用一个整型变量,记录每层节点数,以此做到逐层遍历。
- 使用队列数据结构,LinkedList实现了Deque接口,Deque继承了Queue接口,所以,可以使用LinkedList做为队列。辅助按层遍历。
代码实现
public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
if(pRoot == null)
return null;
int levelNum = 1;
ArrayList<ArrayList<Integer>> lst = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> array;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(pRoot);
while(!queue.isEmpty()){
array = new ArrayList<Integer>();
while(levelNum-- > 0){
TreeNode node = queue.remove();
array.add(node.val);
if(node.left != null)
queue.add(node.left);
if(node.right != null)
queue.add(node.right);
}
lst.add(array);
levelNum = queue.size();
}
return lst;
}
测试代码
//简单示例,不完整
public static void main(String[] args) {
Main m = new Main();
TreeNode root = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
root.left = node2;
root.right = node5;
node2.left = node3;
node2.right = node4;
node5.left = node6;
node5.right = node7;
node3.left = null;
node3.right = null;
node4.left = null;
node4.right = null;
node6.left = null;
node6.right = null;
node7.left = null;
node7.right = null;
ArrayList<ArrayList<Integer> > array = m.Print(root);
}