题目要求按层打印树节点,我对结果建立一个二位数组,使用arraylist存储每层树的结点,答案使用的则是队列和两个用来表示当前层中还没有打印的节点数和下层结点的数目。大同小异,直接上我的代码。
public List<List<Integer>> levelOrder(TreeNode root) {
if(root == null) {
List<List<Integer>> result_order = new ArrayList<List<Integer>>();
return result_order;
}
List<List<Integer>> result_order = new ArrayList<List<Integer>>();
// List<List<TreeNode>> result_tree = new ArrayList<List<TreeNode>>();
TreeNode temp = root;
List<TreeNode> insert_list = new ArrayList<TreeNode>();
insert_list.add(temp);
// result_tree.add(insert_list);
List<Integer> result_insert = new ArrayList<Integer>();
result_insert.add(temp.val);
result_order.add(result_insert);
while(insert_list.size()>0) {
List<TreeNode> new_insert_list = new ArrayList<TreeNode>();
List<Integer> new_result_insert = new ArrayList<Integer>();
for(int count_pre_list = 0;count_pre_list < insert_list.size();count_pre_list++) {
temp = insert_list.get(count_pre_list);
if(temp.left!=null) {
new_insert_list.add(temp.left);
new_result_insert.add(temp.left.val);
}
if(temp.right!=null) {
new_insert_list.add(temp.right);
new_result_insert.add(temp.right.val);
}
}
insert_list = new_insert_list;
if(new_result_insert.size() > 0)
result_order.add(new_result_insert);
}
return result_order;
}