1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| class Solution { private static class State { private int maxWidth; }
public int widthOfBinaryTree(TreeNode root) { State state = new State(); Map<Integer, Integer> depthToLeftIndexMap = new HashMap<>(); dfs(root, depthToLeftIndexMap, 0, 1, state); return state.maxWidth; }
private void dfs(TreeNode root, Map<Integer, Integer> depthToLeftIndexMap, int depth, int index, State state) { if (root == null) { return; }
depthToLeftIndexMap.putIfAbsent(depth, index); state.maxWidth = Math.max(state.maxWidth, index - depthToLeftIndexMap.get(depth) + 1);
dfs(root.left, depthToLeftIndexMap, depth + 1, index * 2, state); dfs(root.right, depthToLeftIndexMap, depth + 1, index * 2 + 1, state); } }
|