![e5b452efdf0581e56cd8c7c346dbb4c4.png](https://img-blog.csdnimg.cn/img_convert/e5b452efdf0581e56cd8c7c346dbb4c4.png)
广度优先搜索(breadth-first search)可用于“图”这种数据结构中,查找最短路径。
树是一种特殊的图,二叉树是一种特殊的树。广度优先搜索常用于遍历二叉树,在这个遍历的过程中,需要用到队列这一先进先出(FIFO)的数据结构。
Queue<Node> queue = new LinkedList<>();
广度优先搜索是层级遍历,它依次遍历每一层的节点,并将该层所有节点的子节点添加到队列中,进行下一次遍历,直到遍历结束,队列为空。
559. Maximum Depth of N-ary Tree
Loading...leetcode.com![2caaff1e6f45b72fb2f698f8df4bfb22.png](https://img-blog.csdnimg.cn/img_convert/2caaff1e6f45b72fb2f698f8df4bfb22.png)
给定一个树,找出这个树的最大深度。
class Solution
{
public int maxDepth(Node root)
{
if(root == null)
{
return 0;
}
int maxDepth = 0;//用于记录最大深度
Queue<Node> queue = new LinkedList<>();//队列
queue.add(root);
while(!queue.isEmpty())//直到队列为空,即,遍历完所有的节点
{
maxDepth++;//每遍历一层,计数+1
int size = queue.size();//当前层节点的个数
for(int i = 0; i < size; i++)
{
Node node = queue.poll();//poll()方法,取出队首节点
if(node.children != null)//如果存在子节点,需要将子节点依次添加到队列中,用于下一层遍历
{
List<Node> children = node.children;
for(Node child : children)
{
queue.add(child);
}
}
}
}
return maxDepth;
}
}
111. Minimum Depth of Binary Tree
Loading...leetcode.com![2caaff1e6f45b72fb2f698f8df4bfb22.png](https://img-blog.csdnimg.cn/img_convert/2caaff1e6f45b72fb2f698f8df4bfb22.png)
给定一个二叉树,求出该二叉树的最小深度(没有子节点的节点,距离根节点的最小距离)。
class Solution
{
/**
* 解法:BFS,遍历每一层,找出第一个没有左右子节点的节点,返回即可。
*/
public int minDepth(TreeNode root)
{
if(root == null)
{
return 0;
}
int minDepth = 0;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
while(!queue.isEmpty())
{
int size = queue.size();
minDepth++;
for(int i = 0; i < size; i++)
{
TreeNode node = queue.poll();
if(node.left == null && node.right == null)//该节点没有子节点
{
return minDepth;
}
if(node.left != null)//左子节点不为空,添加到队列,进行下一层循环
{
queue.add(node.left);
}
if(node.right != null)//右子节点不为空,添加到队列,进行下一层循环
{
queue.add(node.right);
}
}
}
return minDepth;
}
}