劍指 Offer 32 - I. 從上到下列印二叉樹(java解題)

CrazyPixel發表於2023-02-11

1. 題目

從上到下列印出二叉樹的每個節點,同一層的節點按照從左到右的順序列印。
 
例如:
給定二叉樹: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回:
[3,9,20,15,7]

提示:
節點總數 <= 1000

作者:Krahets
連結:https://leetcode.cn/leetbook/read/illustration-of-algorithm/9ackoe/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

2. 解題思路

題目要求列印節點,且是按照每層從左往右的順序列印,實際上是需要實現層次遍歷。
層次遍歷需要用到佇列這個資料結構,在這裡我們使用LinkedList資料結構模擬佇列。
基本的求解過程即:

  1. 建立佇列,將根節點放入佇列中;
  2. 當佇列非空時,取出佇列的首個節點,將節點值存入結果陣列中,同時將該節點的左右子樹節點放入佇列中;

要注意兩點:

  1. 結果陣列的實現:這是一個不定長的int型陣列,因此,先使用ArrayList<Integer>實現不定長陣列,然後將ArrayList<Integer>轉化為int[],如何轉化可參考此篇博文
  2. 插入佇列之前,需要先對節點進行非空判斷,如果一個空節點插入佇列中,會佔據一個位置,但是實際上沒有資料,導致結果陣列中存在異常值,且可能導致佇列永遠不為空。

3. 資料型別功能函式總結

//LinkedList
LinkedList<E> listname=new LinkedList<E>();//初始化
LinkedList.add(elment);//在連結串列尾部新增元素
LinkedList.removeFirst();//取出連結串列頭部元素
LinkedList.size();//獲取元素個數
//ArrayList
ArrayList<E> listname=new ArrayList<E>();//初始化
ArrayList.add(elment);//在陣列最後插入元素
ArrayList.stream().mapToInt(Integer::valueOf).toArray();//ArrayList<Integer>轉為int[]
ArrayList.toArray();//Arraylist轉為陣列,適用於String--char[]
//int[]
arrayname=new ElementType[size];//建立大小為size的陣列,元素型別為ElementType

4. java程式碼

/**
 * 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) {
        ArrayList<Integer> result_list = new ArrayList<Integer>();//結果陣列
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();//佇列
        if(root!=null){
            queue.add(root);
        }
        while(queue.size()!=0){
            TreeNode temp=queue.removeFirst();
            if(temp.left!=null){
                queue.add(temp.left);
            }
            if(temp.right!=null){
                queue.add(temp.right);
            }
            result_list.add(temp.val);
        }
        return result_list.stream().mapToInt(Integer::valueOf).toArray();
    }
}

相關文章