题目:
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行.
示例:
输入:{8,6,10,5,7,9,11}
返回值:[[8],[6,10],[5,7,9,11]]
思路:
- 二叉树的层次遍历,通常使用队列,但是目前看到最简单的应该是一个大佬用递归实现的
- 关键在于根据层次扩容,自顶向下地将每层的结点值添加到对应层次的列表中,由于先左后右,所以顺序也不会乱,这里的depth用的很巧妙
代码:
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 {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> list = new ArrayList();
depth(pRoot, 1, list);
return list;
}
private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list){
if(root == null) return;
// 扩容
if(depth>list.size()) list.add(new ArrayList<Integer>());
// 在对应层次的列表中添加本层元素
list.get(depth-1).add(root.val);
depth(root.left, depth+1, list);
depth(root.right, depth+1, list);
}
}