从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
典型的层序遍历
import java.util.*;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root==null)return list;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root);
while(!queue.isEmpty()){
TreeNode temp = queue.poll();
list.add(temp.val);//给list复制还是要用.val
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
return list;
}
}
下面是针对这道题的正确解法:
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer>> Print(TreeNode pRoot) {
//新建一个 二维数组,用于存放每行二叉树的节点值
ArrayList<ArrayList<Integer>> thelist = new ArrayList<ArrayList<Integer>>();
// 注意该入口函数的返回值是个二维数组,容易写错返回值
if(pRoot==null)return thelist; //这里要求返回thelist而不是null
// 层序遍历会利用到 队列数据结构,此处新建一个队列,并将根节点加入到队列中
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(pRoot);
while( !queue.isEmpty() ) {
// 此处新建一个一维数组,用于存放每一行的节点的值
ArrayList<Integer> list = new ArrayList<Integer>();
int size = queue.size();
for(int i=0;i<size;i++) {
//将每行的节点值加入到一维数组中
TreeNode temp = queue.poll();
list.add(temp.val);
if(temp.left!=null) queue.offer(temp.left);
if(temp.right!=null) queue.offer(temp.right);
}
// 将整个一维数组 加入到二维数组中
thelist.add(list);
}
return thelist;
}
}

本文介绍了如何使用Java实现二叉树的层序遍历,从上到下打印节点,每层从左至右,通过队列数据结构实现。提供两种代码示例,帮助理解并解决题目要求的输出格式。
114

被折叠的 条评论
为什么被折叠?



