算法學習#29 二叉樹的層序遍歷

題目詳情

給你二叉樹的根節點 root ,返回其節點值的 層序遍歷 。 (即逐層地,從左到右訪問所有節點)。

示例 1:

輸入:root = [3,9,20,null,null,15,7]
輸出:[[3],[9,20],[15,7]]

       3
     /   \
    9     20
          / \
         15  7


Java代碼(BFS)

public List<List<Integer>> levelOrder(TreeNode root) {
    //邊界條件判斷
    if (root == null)
        return new ArrayList<>();
    //隊列
    Queue<TreeNode> queue = new LinkedList<>();
    List<List<Integer>> res = new ArrayList<>();
    //根節點入隊
    queue.add(root);
    //如果隊列不為空就繼續循環
    while (!queue.isEmpty()) {
        //BFS打印,levelNum表示的是每層的結點數
        int levelNum = queue.size();
        //subList存儲的是每層的結點值
        List<Integer> subList = new ArrayList<>();
        for (int i = 0; i < levelNum; i++) {
            //出隊
            TreeNode node = queue.poll();
            subList.add(node.val);
            //左右子節點如果不為空就加入到隊列中
            if (node.left != null)
                queue.add(node.left);
            if (node.right != null)
                queue.add(node.right);
        }
        //把每層的結點值存儲在res中,
        res.add(subList);
    }
    return res;
}

總結

層序遍歷需要使用到隊列,因為返回對象是一個包含列表的列表,所以,新建一個包含列表的列表。先將根節點入隊,然后開始遍歷樹,先得到隊列的大小,然后先建一個列表,將隊列中所有元素加入到新建的列表,然后再將左右節點加入隊列,在for循環后將新建的sublist加入列表

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容