1. 程式人生 > 實用技巧 >劍指22.從上往下列印二叉樹

劍指22.從上往下列印二叉樹

題目描述

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

思路

考的是二叉樹的 層序遍歷 。從下圖可以看出,
每次列印一個節點的時候,如果該節點有子節點,則把該節點的子節點放到一個佇列的尾部。接下來到對佇列的頭部取出最早進入佇列的節點放到ArrayList 中,重複前面的操作,直至佇列中所有的節點都存到ArrayList中。

因此,需要使用佇列資料結構,在Java中Queue是和List、Map同等級別的介面,LinkedList中也實現了Queue介面,該介面中的主要函式有:

  • 容量不夠或佇列為空時不會拋異常:offer(新增隊尾元素)、peek(訪問隊頭元素)、poll(訪問隊頭元素並移除)
  • 容量不夠或佇列為空時拋異常:add、element(訪問佇列元素)、remove(訪問隊頭元素並移除)

參考程式碼

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
/**
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> list = new ArrayList<>(); if(root == null) return list; Queue<TreeNode> queue = new LinkedList<>(); queue.offer(root);
//根節點入隊 while(!queue.isEmpty()){ TreeNode curr = queue.poll(); list.add(curr.val); if(curr.left != null) queue.offer(curr.left); if(curr.right != null) queue.offer(curr.right); } return list; } }