1. 程式人生 > 其它 >劍指 Offer 32 - I. 從上到下列印二叉樹

劍指 Offer 32 - I. 從上到下列印二叉樹

技術標籤:LeetCode佇列二叉樹演算法

從上到下打印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。

例如:
給定二叉樹: [3,9,20,null,null,15,7],

在這裡插入圖片描述
返回:
[3,9,20,15,7]

提示:

節點總數 <= 1000

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof

思路

1、建立一個佇列和陣列;
2、佇列具有先進先出的特性,把根節點放入;
3、從佇列中取出一個節點(根節點),把它的值放入陣列中;如果它的節點存在,依次把它的左節點和右節點放入佇列中;

4、在從佇列中取出節點(根節點的左節點),此時為根節點的左節點,把它的值放入陣列中;如果它的節點存在,依次把它的左節點和右節點放入佇列中;
5、接下來為根節點的右節點,依次類推;
6、最後再把節點用int[]形式輸出;

程式碼

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution
{ public int[] levelOrder(TreeNode root) { if(root == null) return new int[0]; Queue<TreeNode> queue = new LinkedList<>(){{add(root);}}; ArrayList<Integer> array = new ArrayList(); while(!queue.isEmpty()){ TreeNode node = queue.poll()
; array.add(node.val); if(node.left != null){ queue.add(node.left); } if(node.right != null){ queue.add(node.right); } } int[] arrOut = new int[array.size()]; for(int i = 0; i < array.size(); i++){ arrOut[i] = array.get(i); } return arrOut; } }