import java.util.HashMap;
import java.util.LinkedList;
import java.util.Queue;
/**
* 二叉树最大宽度
*/
public class TreeMaxWidth {
/**
* 不使用HashMap实现
*
* @param head 二叉树的头节点
* @return 最大宽度
*/
public int treeMaxWidthNoMap(Node head) {
int maxWidth = 0;
if (head == null) {
return maxWidth;
}
// 用队列实现
Queue<Node> queue = new LinkedList<>();
queue.add(head);
Node curEnd = head;
Node nextEnd = null;
int curWidth = 0;
while (!queue.isEmpty()) {
Node node = queue.poll();
if (node.left != null) {
queue.add(node.left);
nextEnd = node.left;
}
if (node.right != null) {
queue.add(node.right);
nextEnd = node.right;
}
curWidth++;
if (node == curEnd) {
maxWidth = Math.max(maxWidth, curWidth);
curWidth = 0;
curEnd = nextEnd;
}
}
return maxWidth;
}
/**
* 使用HashMap实现
*
* @param head 二叉树的头节点
* @return 最大宽度
*/
public int treeMaxWidthUseMap(Node head) {
int maxWidth = 0;
if (head == null) {
return maxWidth;
}
// 用队列实现
Queue<Node> queue = new LinkedList<>();
queue.add(head);
// 节点对应在哪一层
HashMap<Node, Integer> levelMap = new HashMap<>();
levelMap.put(head, 1);
int curWidth = 0;
int level = 1;
while (!queue.isEmpty()) {
Node node = queue.poll();
int curLevel = levelMap.get(node);
if (node.left != null) {
queue.add(node.left);
levelMap.put(node.left, levelMap.get(node) + 1);
}
if (node.right != null) {
queue.add(node.right);
levelMap.put(node.right, levelMap.get(node) + 1);
}
if (curLevel == level) {
curWidth++;
} else {
maxWidth = Math.max(maxWidth, curWidth);
level = curLevel;
curWidth = 1;
}
}
maxWidth = Math.max(maxWidth, curWidth);
return maxWidth;
}
/**
* 二叉树结构
*/
public static class Node {
public int value;
public Node left;
public Node right;
public Node(int value) {
this.value = value;
}
}
}
/* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */
求二叉树最大宽度
原创
©著作权归作者所有:来自51CTO博客作者放下也不自在的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:打印一棵二叉树
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】二叉树的存储结构
【数据结构】第五章——树与二叉树详细介绍二叉树的存储结构……
二叉树 数据结构 C语言 -
【二叉树】二叉树最大宽度
题目给定一个二叉树编写一个函数来获取这个树的 最大宽度树的宽度是 所空
swift 算法 二叉树 满二叉树 五笔 -
564,二叉树最大宽度
BFS和DFS两种方式解二叉树最大宽度
Java练习题二叉树 -
求二叉树的宽度
二叉树的宽度是指二叉树各层结点个数的最大值。...
二叉树 结点 出队 层次遍历 子树