22.从上往下打印二叉树(java)

题目描述

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

解题思路

二叉树的广度优先遍历,借助队列实现。

import java.util.ArrayList;
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<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> tree = new ArrayList<Integer>();
        if(root==null)
            return tree;
        Queue<TreeNode> qu = new LinkedList<TreeNode>();
        qu.offer(root);
        while(!qu.isEmpty())
        {
            TreeNode treeNode = qu.poll();
            if(treeNode.left!=null) qu.offer(treeNode.left);
            if(treeNode.right!=null) qu.offer(treeNode.right);
            tree.add(treeNode.val);
        }
        return tree;
    }
}

自己遇到的问题

java中队列的一些知识:

声明:

Queue<TreeNode> qu = new LinkedList<TreeNode>();

offer,add 区别:

一些队列有大小限制,因此如果想在一个满的队列中加入一个新项,多出的项就会被拒绝。

这时新的 offer 方法就可以起作用了。它不是对调用 add() 方法抛出一个 unchecked 异常,而只是得到由 offer() 返回的 false。

poll,remove 区别:

remove() 和 poll() 方法都是从队列中删除第一个元素。remove() 的行为与 Collection 接口的版本相似, 但是新的 poll() 方法在用空集合调用时不是抛出异常,只是返回 null。因此新的方法更适合容易出现异常条件的情况。

peek,element区别:

element() 和 peek() 用于在队列的头部查询元素。与 remove() 方法类似,在队列为空时, element() 抛出一个异常,而 peek() 返回 null。

发布了43 篇原创文章 · 获赞 0 · 访问量 462

猜你喜欢

转载自blog.csdn.net/gaopan1999/article/details/104499911