思路: 就是对节点进行编号,更节点是0,左子树的编号=根节点x2+1,,右子树的编号=根节点x2+2 最大宽度就是每一层最后一个编号-第一个编号+1
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var widthOfBinaryTree = function(root) {
if(!root) return 0
let res = [], maxWidth = 1
recusion(root,0,0)
return maxWidth
function recusion(root,level,num){
if(res[level]){
res[level].push(num)
}else{
res[level] = [num]
}
let tempArr = res[level]
let width = tempArr[tempArr.length -1] - tempArr[0] + 1
if(width > maxWidth){
maxWidth = width
}
if(root.left){
recusion(root.left,level+1,num*2+1)
}
if(root.right){
recusion(root.right,level+1,num*2+2)
}
}
};