1. 程式人生 > 實用技巧 >LeetCode 102. 二叉樹的層序遍歷 Java

LeetCode 102. 二叉樹的層序遍歷 Java

這個層序遍歷要求返回每層的節點,正常的BFS從佇列中彈出一個節點後就判斷其有沒有左子樹和右子樹,所以直接用BFS實現的話無法分層輸出。
需要記錄每層的節點數目,增加一個for迴圈就可以了。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public List<List<Integer>> levelOrder(TreeNode root) {
        Queue<TreeNode> queue = new ArrayDeque<>();
        List<List<Integer>> nodes = new ArrayList<>();
        if(root != null){
            queue.add(root);
        }
        while(!queue.isEmpty()){
            int n = queue.size();
            List<Integer> list = new ArrayList<>();
            for(int i=0;i<n;i++){//先輸出一整層節點
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left != null){
                    queue.add(node.left);
                }
                if(node.right != null){
                    queue.add(node.right);
                }
            }
            nodes.add(list);
        }
        return nodes;
    }
}