每日刷题day07---二叉树的最大宽度

186 阅读1分钟

leetcode传送们

image.png

思路: 就是对节点进行编号,更节点是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)
        }
    }
};