代码随想录Day17打卡 二叉树(4)

37 阅读1分钟

110 平衡二叉树

使用后续遍历,先求出左边高度和右边高度,再看其差值

var isBalanced = function(root) {
    let res = true
    const dfs = (node) => {
        if (!node) {
            return 0
        }
        const left = dfs(node.left)
        const right = dfs(node.right)
        
        if (Math.abs(left - right) > 1) {
            res = false
        }
        return 1 + Math.max(left, right)
    }
    dfs(root)
    return res
    
};

257 二叉树的所有路径

类似回溯

var binaryTreePaths = function(root) {
    const res = [], path = []
    if (!root) {
        return res
    }
    const dfs = (node) => {
        if (!node) {
            return 
        }
        if (!node.left && !node.right) {
            path.push(node.val)
            res.push(path.join("->"))
            path.pop()
            return 
        }
        path.push(node.val)
        dfs(node.left)
        dfs(node.right)
        path.pop()
    }
    dfs(root)
    return res
};

404 左叶子之和

var sumOfLeftLeaves = function(root) {
    let sum = 0
    function dfs (node) {
        if (!node) {
            return 
        }
        // 左叶子的定义
        if (node.left && !node.left.left && !node.left.right) {
            sum += node.left.val
        }

        dfs(node.left)
        dfs(node.right)

    }

    dfs(root)
    return sum
};