Maximum Width of Binary Tree 二叉树最大宽度
二叉树的宽度:
每一层的宽度被定义为两个端点(该层最左和最右的非空节点,两端点间的null节点也计入长度)之间的长度。
输入:A = [3,4,5,1,2], B = [4,1]
输出:true输入:
1
/
3 2
/
5 3 9
输出: 4
解释: 最大值出现在树的第 3 层,宽度为 4 (5,3,null,9)。
思路
利用层序遍历的方式,记录节点和序号。
将每层的最右节点序号r - 最左节点的序号l。
递归
public class TwoTuple<A,B> {
public final A first;
public final B second;
public TwoTuple(A a, B b){
first = a;
second = b;
}
}
public int widthOfBinaryTree(TreeNode root) {
LinkedList<TwoTuple<TreeNode, Integer>> q = new LinkedList<>();
q.offer(new TwoTuple<>(root,0));
int ans = 0;
while (!q.isEmpty()){
int cnt = q.size();
int l = q.peekFirst().second;
int r=0;
for (int i = 0; i < cnt; i++) {
TwoTuple<TreeNode, Integer> temp = q.peek();
r = temp.second -l;
if(temp.first.left!=null){
q.offer(new TwoTuple<>(temp.first.left,r*2));
}
if(temp.first.right!=null){
q.offer(new TwoTuple<>(temp.first.right,r*2+1));
}
q.poll();
}
ans = Math.max(ans,r+1);
}
return ans;
}
Tag
tree