LeetCode102-二叉树的层序遍历

 

非商业,LeetCode链接附上:

https://leetcode-cn.com/problems/binary-tree-level-order-traversal/

进入正题。

 

题目:

给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。

 

示例:

示例:
二叉树:[3,9,20,null,null,15,7],

3
/ \
9 20
/ \
15 7
返回其层次遍历结果:

[
[3],
[9,20],
[15,7]
]

 

代码实现:

//节点
class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        public TreeNode(int val) {
            this.val = val;
        }
}

public List<List<Integer>> levelOrder(TreeNode root) {

        List<List<Integer>> res = new ArrayList<>();
        Queue<TreeNode> queue = new LinkedList<>();
        if(root == null) {
            return res;
        }

        queue.add(root);
        while (!queue.isEmpty()) {

            List<Integer> subList = new ArrayList<>();
            int count = queue.size();
            while (count > 0) {
                TreeNode node = queue.poll();
                subList.add(node.val);
                if(node.left != null) {
                    queue.offer(node.left);
                }
                if(node.right != null) {
                    queue.offer(node.right);
                }
                count--;
            }
            res.add(subList);
        }

        return res;
}
//时间复杂度O(n),空间复杂度O(n)

 

分析:

广度有限搜索,利用队列(Queue)的性质,及poll()、offer()方法;

注意细节;

关于树的算法,手法要细腻。

 

--End

 

posted @ 2020-11-30 22:34  黑冰台  阅读(115)  评论(0)    收藏  举报