版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zm13007310400/article/details/81294779
题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
时间限制:1秒 空间限制:32768K 热度指数:214680
解答:
import java.util.ArrayList;
import java.util.concurrent.LinkedBlockingQueue;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {//思路:实际上就是宽度优先遍历,可以采用辅助队列:将根节点放入队列头,然后取出,并将它的左右孩子依次
//压入队列;然后取出队列头元素,将队列头元素(此时也就是根节点的左孩子)的左右孩子依次压入栈队列...直到队列元素为0
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> array = new ArrayList();
if (null == root) {
return array;
}
if (root.left==null && root.right==null) {
array.add(root.val);
return array;
}
LinkedBlockingQueue<TreeNode> queue1 = new LinkedBlockingQueue();
queue1.add(root);
while (queue1.size()!=0) {
TreeNode curNode = queue1.poll();
array.add(curNode.val);
if (curNode.left != null) {
queue1.add(curNode.left);
}
if (curNode.right != null) {
queue1.add(curNode.right);
}
}
return array;
}
}