栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

面试常见的两种宽(深)度优先(BFS)遍历 Java实现(附有详细解析)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

面试常见的两种宽(深)度优先(BFS)遍历 Java实现(附有详细解析)

宽度优先搜索(BFS, Breadth First
Search)是一个针对图和树的遍历算法。发明于上世纪50年代末60年代初,最初用于解决迷宫最短路径和网络路由等问题

第一种:使用map纪录层数
public static int maxWidthUseMap(Node head) {
		if (head == null) {
			return 0;
		}
		//队列
		Queue queue = new linkedList<>();
		queue.add(head);//把头节点加入到队列中
		//value表示key节点在那一层
		HashMap levelMap = new HashMap<>();
		//把头结点放在第一层
		levelMap.put(head, 1);
		int curLevel = 1;
		int curLevelNodes = 0;
		int max = 0;
		while (!queue.isEmpty()) {
			Node cur = queue.poll();
			int curNodeLevel = levelMap.get(cur);
			if (cur.left != null) {
				//如果左孩子存在把左孩子存入map
				levelMap.put(cur.left, curLevelNodes + 1);
				//如果左孩子存在把左孩子加入队列
				queue.add(cur.left);
			}
			if (cur.right != null) {
				//如果右孩子存在把左孩子存入map
				levelMap.put(cur.right, curLevelNodes + 1);
				//如果右孩子存在把左孩子加入队列
				queue.add(cur.right);
			}
			//如果还是在当前层 则当前层的节点个数++ 否则进入下一层并获得最大的节点个数
			if (curNodeLevel == curLevel) {
				curLevelNodes++;
			} else {
				max = Math.max(max, curLevelNodes);
				curLevel++;
				curLevelNodes = 1;
			}
		}
		max = Math.max(max, curLevelNodes);
		return max;
	}
第二种:不使用map
public static int maxWidthNoMap(Node head) {
		if(head==null) {
			return 0;
		}
		//定义队列
		Queue queue=new linkedList<>();
		//把头结点加入到队列
		queue.add(head);
		//当前层的最右节点
		Node curEnd=head;
		//下一层的最右节点
		Node nextEnd=null;
		int max=0;
		int curLevelNodes=0;
		while(!queue.isEmpty()) {
			//出队列
			Node cur=queue.poll();
			//当前节点有左孩子 将左孩子入队列 并将左孩子暂时置为下一行的最后一个节点
			if(cur.left!=null) {
				queue.add(cur.left);
				nextEnd=cur.left;
			}
			//当前节点有右孩子 将右孩子入队列 并将右孩子暂时置为下一行的最后一个节点
			if(cur.right!=null) {
				queue.add(cur.right);
				nextEnd=cur.right;
			}
			curLevelNodes++;//记录当前出队列的节点++
			//当到当前层的最后一个节点后 开始进入下一层的遍历
			//更新最大节点数  当前层节点数置为0    下一层的最后一个节点设为当前层的最后一个节点
			if(cur==curEnd) {
				max=Math.max(max, curLevelNodes);
				curLevelNodes=0;
				curEnd=nextEnd;
			}
		}
		return max;
	}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/782595.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号