题目

image.png

思路

  • 假设满二叉树表示成数组序列, 根节点所在的位置为1, 则任意位于i节点的左右子节点的index为2i, 2i+1

    1. 用一个List保存每层的左端点, 易知二叉树有多少层List的元素就有多少个. 那么可以在dfs的过程中记录每个<br /> 节点的index及其所在的层level, 如果level > List.size()说明当前节点就是新的一层的最左节点, 将其<br /> 加入List中, 否则判断当前节点的index减去List中对应层的最左节点的index的宽度是否大于最大宽度并更新

代码

    int max = 0;
    public int widthOfBinaryTree(TreeNode root) {
        if (root == null) return 0;
        dfs(root, 1, 1, new ArrayList<>());
        return max;
    }


    public void dfs(TreeNode root, int level, int index ,List<Integer> left) {
        if (root == null) return;
        if (level > left.size()) left.add(index);
        max = Math.max(max, index - left.get(level - 1) + 1);
        level += 1;
        dfs(root.left, level, index * 2, left);
        dfs(root.right, level, index * 2 + 1, left);
    }
   [二叉树最大宽度](https://leetcode-cn.com/problems/maximum-width-of-binary-tree/submissions/)