【DFS / BFS】001 二叉树的层次遍历

本文详细解析了如何使用BFS算法进行二叉树的层次遍历,通过队列实现节点的逐层访问,最终得到从左到右、由上至下的节点值列表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、题目

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).

For example: Given binary tree [3, 9, 20, null, null, 15, 7],

    3
   / \
  9  20
    /  \
   15   7

return its level order traversal as:

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

二、分析

【1】迭代 —> BFS (队列)

将树上顶点按照层次依次放入队列中,队列中元素满足 FIFO 的原则。在 Java 中可以使用 Queue 接口中的 LinkedList 实现。

思路:

初始化 ans 列表,以及一个用于存放结点的 nodeQueue 和存放数值的 integerQueue,和一个 width 记录当前层结点的数目.

将同一层中的节点同时入队列。在将 nodeQueue 中某元素出队列的同时,将该元素的下一层的元素进队列。

public List<List<Integer>> levelOrder(TreeNode root) {
	List<List<Integer>> ans = new LinkedList<List<Integer>>();;
	if(root == null)	return ans;
	LinkedList<TreeNode> nodeQueue = new LinkedList<>();
	TreeNode node;
	int width = 0;
	nodeQueue.add(root);
	while(!nodeQueue.isEmpty()) {
		width = nodeQueue.size();
	    LinkedList<Integer> integerQueue = new LinkedList<>();
		for(int i = 0; i < width; i++) {
			node = nodeQueue.removeFirst();
			integerQueue.addLast(node.val);
			if(node.left != null)	nodeQueue.add(node.left);
			if(node.right != null)  nodeQueue.add(node.right);
		}//for
		ans.add(integerQueue);
	}//while
	return ans;
}

复杂度分析

时间复杂度:O(N),因为每个节点恰好会被运算一次。

空间复杂度:O(N),保存输出结果的数组包含 N 个节点的值。


下一篇

【练习】002 Perfect Squares【 BFS / DP】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值