LeetCode102——二叉树的层序遍历

版权声明:版权所有,转载请注明原网址链接。 https://blog.csdn.net/qq_41231926/article/details/82312963

我的LeetCode代码仓:https://github.com/617076674/LeetCode

原题链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/description/

题目描述:

知识点:二叉树的层序遍历

思路:每一轮操作中记录队列的size,每出队size个节点后保存进一个List集合

如果只是普通的二叉树的层序遍历,毫无难度。而本题的难点在于,我们要将层序遍历的结果分层放在各个List集合中

在满足队列不为空条件的这个外循环里,我们先记录每一层的节点个数,即此时队列中存放的节点个数,记作size。我们将每出队操作size个节点后的结果保存进一个List集合里,这样就实现了分层存放的目的。

整个过程中,注意入队之前要判断入队的节点是否为null。

时间复杂度是O(n)级别的,其中n为二叉树中的节点个数。由于队中的元素个数最多为(2 ^ h)个,其中h为树的高度,因此空间复杂度为O(2 ^ h)级别的。

JAVA代码:

public class Solution {
	
	public List<List<Integer>> levelOrder(TreeNode root) {
		List<List<Integer>> listList = new ArrayList<>();
		if(root == null) {
			return listList;
		}
		Queue<TreeNode> queue = new LinkedList<>(); 
		queue.add(root);
		while(!queue.isEmpty()) {
			int size = queue.size();
			List<Integer> list = new ArrayList<>();
			while(size > 0) {
				TreeNode tempNode = queue.poll();
				list.add(tempNode.val);
				if(tempNode.left != null) {
					queue.add(tempNode.left);
				}
				if(tempNode.right != null) {
					queue.add(tempNode.right);
				}
				size--;
			}
			listList.add(list);
		}
		return listList;
	}
}

LeetCode解题报告:

猜你喜欢

转载自blog.csdn.net/qq_41231926/article/details/82312963