二叉树的最大深度

dfs

题解前递归

根节点是0,变量保存最大深度,如果当前深度大于最大深度就更新,返回最大深度

var maxDepth = function(root) {
    let maxDeep = 0  //最大深度
    let dg = (root,deep = 0) => {  //deep当前深度
        if(root == null) return
        deep++ 
        if(deep > maxDeep) maxDeep = deep
        dg(root.left,deep)
        dg(root.right,deep)
    }
    dg(root)
    return maxDeep
};

 题解后递归

叶子节点是0,递归到父节点 比较左子节点和右子节点的大小 + 1

var maxDepth = function(root) {
    if(root == null) return 0
    let left = maxDepth(root.left)
    let right = maxDepth(root.right)
    return Math.max(left,right) + 1
};

 

 

 bfs

遍历当前层所有节点,弹出,如果有子节点入栈,如果栈的长度大于0,深度 + 1

var maxDepth = function(root) {
    if(root == null) return 0
    let arr = [root]
    let deep = 1
    while(arr.length){
        let len = arr.length
        for(let i = 0; i < len; i++){
            let n = arr.shift()
            if(n.left) arr.push(n.left)
            if(n.right) arr.push(n.right)
        }
        if(arr.length > 0) deep++
    }
    return deep
};

 

posted @ 2021-01-19 23:09  张最棒  阅读(176)  评论(0编辑  收藏  举报