题目
思路
- 应该是要用到队列吧,使用BFS,个人感觉,但我不会做,BFS做的次数太少了,去看看题解。
- 题解竟然也能用DFS,用pos代表每个节点的位置,当第一次访问到一个新的depth时存储其pos值,即为当前depth的最小pos值,后面的pos减去它+1即有可能成为最大宽度,记录即可。
代码
int ans;
Map<Integer,Integer> map;
public int widthOfBinaryTree(TreeNode root) {
ans=0;
map = new HashMap<>();
dfs(root,0,0);
return ans;
}
public void dfs(TreeNode root,int depth,int pos){
if(root==null) return;
map.computeIfAbsent(depth,x->pos);
ans = Math.max(ans, pos - map.get(depth) + 1);
dfs(root.left, depth + 1, 2 * pos);
dfs(root.right, depth + 1, 2 * pos + 1);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22