TreeviewCopyright © aleen42 all right reserved, powered by aleen42

32 - II. 从上到下打印二叉树 II

https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/

Java

/*
 * @Author: Goog Tech
 * @Date: 2020-08-20 11:06:00
 * @LastEditTime: 2020-08-20 11:06:34
 * @Description: https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/
 * @FilePath: \leetcode-googtech\剑指 Offer\#32 - II. 从上到下打印二叉树 II\Solution.java
 * @WebSite: https://algorithm.show/
 */

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */

class Solution {
    // BFS: 使用队列实现二叉树的层次遍历
    public List<List<Integer>> levelOrder(TreeNode root) {
        // 初始化用于存储结果的 list 集合
        List<List<Integer>> result = new ArrayList<>();
        // 初始化辅助队列
        Queue<TreeNode> queue = new LinkedList<>();
        // 判断头节点是否为空
        if(root != null) queue.add(root);
        // 循环遍历队列
        while(!queue.isEmpty()) {
            // root非空时,第一层的节点数为一
            int n = queue.size();
            // 初始化用于存储每层节点的 list 集合
            List<Integer> list = new ArrayList<>();
            // 进行 n 次循环,确保当前层的节点全部出队列
            for(int i = 0; i < n; i++) {
                root = queue.poll();
                // 将该层的节点存储到 list 结合中
                list.add(root.val);
                // 把当前节点所有的孩子节点全部加入队列中,进而确保当前队列的 size 就是下一层的节点数
                if(root.left != null) queue.add(root.left);
                if(root.right != null) queue.add(root.right);
            }
            // 将每层的节点列表加入到结果列表中
            result.add(list);
        }
        // 返回结果
        return result;
    }
}

Python

'''
Author: Goog Tech
Date: 2020-08-20 11:06:05
LastEditTime: 2020-08-20 11:07:08
Description: https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/
FilePath: \leetcode-googtech\剑指 Offer\#32 - II. 从上到下打印二叉树 II\Solution.py
WebSite: https://algorithm.show/
'''

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):

    # Breadth Fist Search: 使用队列实现二叉树的层次遍历
    def levelOrder(self, root):
        """
        :type root: TreeNode
        :rtype: List[List[int]]
        """
        # 初始化 result 其用于存储每层的节点列表
        result = []
        # 初始化辅助队列,并将根节点入队
        queue = [root]
        # 判断头节点是否为空
        if not root: return result
        # 循环遍历队列
        while queue:
            # root非空时,第一层的节点数为一
            length = len(queue)
            # 初始化 alist 其用于存储当前层的节点
            alist = []
            # 进行 n 次遍历,确保当前层的节点数全部出队列
            for i in range(length):
                # 将队首节点出队
                node = queue.pop(0)
                # 将当前层的节点存储到 alist 集合中
                alist.append(node.val)
                # 把当前节点所有的左右孩子节点全部加入队列,进而确保当前队列的 length 就是下一层的节点数
                if node.left: queue.append(node.left)
                if node.right: queue.append(node.right)
            # 将每层的节点列表加入到结果列表中
            result.append(alist)
        # 返回结果
        return result
Copyright © GoogTech 2021 all right reserved,powered by GitbookLast update time : 2021-09-15 01:55:05

results matching ""

    No results matching ""