二叉树深度优先遍历就是 先序遍历
二叉树宽度优先遍历,
用队列,先进先出,先放左,再放右
public static void widthOrder(Node head) { if (head == null) { return; } Queue<Node> queue = new LinkedList<>(); queue.add(head); Node cur = null; while (!queue.isEmpty()) { cur = queue.poll(); System.out.print(cur.value + " "); if (cur.left != null) { queue.add(cur.left); } if (cur.right != null) { queue.add(cur.right); } } }
二叉树最大宽度
- 当前遍历到第几层,
- 当前层有多少个node
public static int getMaxWidth(Node head) { if (head == null) { return 0; } Node cur = null; Node left = null; Node right = null; Integer curLevel = 0; Integer maxWidth = -1; Integer curWidth = 1; Integer nodeLevel = null; // 队列,先进先出 LinkedList<Node> queue = new LinkedList<>(); queue.add(head); // 根节点 入队 // 准备haspMap key是node, value是当前是node的层数 HashMap<Node, Integer> levelMap = new HashMap<>(); levelMap.put(head, 1); // 根节点 1层 while (!queue.isEmpty()) { cur = queue.poll(); // 出队 left = cur.left; right = cur.right; nodeLevel = levelMap.get(cur); // 获取当前Node 层数 if (left != null) { // 左node 入队 queue.add(left); // 左node 层数 + 1 存入 map levelMap.put(left, nodeLevel + 1); } if (right != null) { // 右node 入队 queue.add(right); // 右node 层数 + 1 存入map levelMap.put(right, nodeLevel + 1); } if (levelMap.get(cur) > curLevel) { //因为是按层遍历的,如果层变了,说明肯定到下一层了。,可以更新参数了 // 当前node的层数大于 当前层, curWidth = 1; // 更新 curWidth curLevel = levelMap.get(cur); // 更新curLevel } else { // 当前node还是属于同一层 curWidth++; } // 更新 maxWidth maxWidth = Math.max(maxWidth, curWidth); } return maxWidth; }
不使用hashMap 的方法
变量:
- max
- 当前层最后一个节点 初始根节点
- 下一层最后一个节点 节点进队 就更新 为当前进队的节点
- 当前层发现的node数
- 当前level
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具