LeetCode 102. 二叉树的层次遍历 **

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

测试用例

示例:
二叉树:[1,2,3,4,null,6,7]

tree
返回其层次遍历结果:

[
[1],
[2,3],
[4,6,7]
]

解题思路

广度优先搜索

  • 首先根元素入队
  • 当队列不为空的时候
    • 求当前队列 s i s_i si的长度
    • 依次从队列中取 s i s_i si个元素进行拓展,然后进入下一次迭代

它和 BFS 的区别在于 BFS 每次只取一个元素拓展,而这里每次取 s i s_i si个元素。在上述过程中的第 i i i 次迭代就得到了二叉树的第 i i i层的 s i s_i si个元素。

Code

class Solution {
    
    
    public List<List<Integer>> levelOrder(TreeNode root) {
    
    
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        if (root == null) {
    
    
            return result;
        }
        //定义一个节点队列
        List<TreeNode> queue = new LinkedList<TreeNode>();
        //入队
        queue.add(root);
        while (!queue.isEmpty()) {
    
    
        	//定义 层数组,存储 每一层元素
            List<Integer> level = new ArrayList<Integer>();
            int currentLevelSize = queue.size();
            for (int i = 0; i < currentLevelSize; i++) {
    
    
            	//出队
                TreeNode node = queue.remove(0);
                level.add(node.val);
                if (node.left != null) {
    
    
                    queue.add(node.left);
                }
                if (node.right != null) {
    
    
                    queue.add(node.right);
                }
            }
            result.add(level);
        }
           return result;
    }
}

复杂度分析

记树上所有节点的个数为 n n n

  • 时间复杂度:每个节点进队出队各一次,故渐进时间复杂度为 O ( n ) O(n) O(n)
  • 空间复杂度:队列中元素的个数不超过 n n n 个,故渐进空间复杂度为 O ( n ) O(n) O(n)

猜你喜欢

转载自blog.csdn.net/weixin_43405220/article/details/108601475