[劍指offer][Java]從上往下打印二叉樹

題目

從上往下打印出二叉樹的每個節(jié)點,同層節(jié)點從左至右打印。

程序核心思想

原來想用遞歸做,但是發(fā)現遞歸一下就到最底層了,不能實現層級遍歷。所以想到用隊列,隊列里面存放的是樹的節(jié)點,出一個結點就添加進去它的左孩子和右孩子,這樣就能實現層級遍歷了。

Tips

  • 隊列的一些使用方法:
    Java 集合中的 Queue 繼承自Collection 接口,Deque, LinkedList, PriorityQueue, BlockingQueue 等類都實現了它。
    Queue使用時要盡量避免Collection的add()和remove()方法,而是要使用offer()來加入元素,使用poll()來獲取并移出元素。它們的優(yōu)點是通過返回值可以判斷成功與否,add()和remove()方法在失敗的時候會拋出異常。 如果要使用前端而不移出該元素,使用element()或者peek()方法。
  • 創(chuàng)建隊列:Queue<TreeNode> queue = new LinkedList<TreeNode>();
    添加元素:offer()
    出隊:poll()
    是否為空:isEmpty()
    查看隊頭元素(不出隊):peek()或element()

代碼

import java.util.ArrayList;
import java.util.Queue;
import java.util.LinkedList;
/**
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) {
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        ArrayList<Integer> array = new ArrayList<Integer>();
        if(root == null)    return array;

        queue.offer(root);
        while(queue.isEmpty() == false){
            TreeNode node = (TreeNode)queue.poll();
            if(node.left != null)    queue.offer(node.left);
            if(node.right != null)    queue.offer(node.right);
            array.add(node.val);
        }
        return array;
    }
}
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容