clllll  

二叉树深度优先遍历就是 先序遍历

二叉树宽度优先遍历,

用队列,先进先出,先放左,再放右

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
posted on 2022-05-05 23:28  llcl  阅读(58)  评论(0)    收藏  举报