二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值。 (即逐层地,从左到右访问所有节点)。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[9,20],
[15,7]
]
思路+代码+注释:
public List<List<Integer>> levelOrder(TreeNode root) {
/*
思路:树的层次遍历和广度优先搜索差不多,所以可以采用广度优先搜索解决
queue队列存储已经被访问但是相连节点没有被访问的节点
当队列中有节点时,弹出所有节点,将所有节点放在一个集合中放到总集合里,再获取每个节点的左右节点,添加到队列中
*/
Queue<TreeNode> queue=new LinkedList<>();
List<List<Integer>> res=new ArrayList<>();
if (root==null)
{
return res;
}else {
queue.add(root);
}
while (queue.size()>0)
{
List<TreeNode> treeNodes=new ArrayList<>();
List<Integer> treeNodeVals=new ArrayList<>();
while (queue.size()>0)
{
TreeNode node=((LinkedList<TreeNode>) queue).pop();
treeNodes.add(node);
treeNodeVals.add(node.val);
}
res.add(treeNodeVals);
for (TreeNode treeNode:treeNodes
) {
//左节点不为空添加到队列中
if (treeNode.left!=null)
{
queue.add(treeNode.left);
}
//右节点不为空添加到队列中
if (treeNode.right!=null)
{
queue.add(treeNode.right);
}
}
}
return res;
}