劍指22.從上往下列印二叉樹
阿新 • • 發佈:2020-08-13
題目描述
從上往下打印出二叉樹的每個節點,同層節點從左至右列印。思路
考的是二叉樹的 層序遍歷 。從下圖可以看出,
每次列印一個節點的時候,如果該節點有子節點,則把該節點的子節點放到一個佇列的尾部。接下來到對佇列的頭部取出最早進入佇列的節點放到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; } }