牛客网刷题java之从上往下打印出二叉树的每个节点,同层节点从左至右打印。

题目:

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

思路:

利用队列来进行实现,首先要知道队列的方法,队列其实可以看做成一个arraylist或者linkedlist

下表显示了jdk1.5中的阻塞队列的操作:

  arraylist的方法

        add        增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  remove   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
  element  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常

       linkedlist的方法
  offer       添加一个元素并返回true       如果队列已满,则返回false
  poll         移除并返问队列头部的元素    如果队列为空,则返回null
  peek       返回队列头部的元素             如果队列为空,则返回null


  put         添加一个元素                      如果队列满,则阻塞
  take        移除并返回队列头部的元素     如果队列为空,则阻塞

牛客网刷题java之从上往下打印出二叉树的每个节点,同层节点从左至右打印。_第1张图片

代码:

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 {
    public ArrayList PrintFromTopToBottom(TreeNode root) {
        //创建一个list用于返回层次遍历的内容
        ArrayList list=new ArrayList<>();
        //创建一个辅助队列,用于实现算法
        ArrayList queue=new ArrayList<>();
        //重要的一步,一定要判断是否为空
        if(root==null)
        {
            return list;
        }
        //将根加入队列
        queue.add(root);
        //如果队列中一直有内容则一直循环
        while(queue.size()>0)
        {
            //先将队列中的内容取出来一个
            TreeNode temp=queue.remove(0);
            //有左则加入队列
            if(temp.left!=null)
            {
                queue.add(temp.left);
            }
            //有右则加入队列
            if(temp.right!=null)
            {
                queue.add(temp.right);
            }
            //将目前的值加入list当中
            list.add(temp.val);
        }
        return list;
    }
}

另一种解法:

import java.util.*;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

    public TreeNode(int val) {
        this.val = val;

    }

}
*/
public class Solution {
    public ArrayList PrintFromTopToBottom(TreeNode root) {
    Queue queue = new LinkedList<>();
    ArrayList ret = new ArrayList<>();
    queue.add(root);
    while (!queue.isEmpty()) {
        int cnt = queue.size();
        while (cnt-- > 0) {
            TreeNode t = queue.poll();
            if (t == null)
                continue;
            ret.add(t.val);
            queue.add(t.left);
            queue.add(t.right);
        }
    }
    return ret;
}
}

 

你可能感兴趣的:(java,剑指offer,二叉树)