Skip to content

404 左叶子之和

给定二叉树的根节点 root ,返回所有左叶子之和。

题解

我们可以利用层序遍历来解答此题,最主要的判断在于是否是左叶子节点

左叶子节点要通过它的父节点判断,如果一个父节点root,那么他是否有左叶子节点可以用以下方式判断。

javascript
root.left && !root.left.left && !root.left.right

对应我们层序遍历

javascript
var sumOfLeftLeaves = function(root) {
    const queue = []
    let result = 0
    if(!root) {
        return result
    }
    queue.push(root)
    while(queue.length) {
        const size = queue.length

        for(let i=0;i<size;i++) {
            const current = queue.shift()

            //当前节点的左节点是一个叶子节点
            if(current.left && !current.left.left && !current.left.right) {
                result+= current.left.val
            }

            if(current.left) {
                queue.push(current.left)
            }
            if(current.right) {
                queue.push(current.right)
            }
        }
    }
    return result
}

题解2

我们同样可以用前序遍历的非递归方法来实现

javascript
var sumOfLeftLeaves = function(root) {
    //前序遍历非递归
    const stack = []
    let result = 0
    if(!root) {
        return result
    }
    stack.push(root)
    while(stack.length) {
        const current = stack.pop()
        //同样方法判断是否左叶子
        if(current.left && !current.left.left && !current.left.right) {
            result += current.left.val
        }
        if(current.right) {
            stack.push(current.right)
        }
        if(current.left){
            stack.push(current.left)
        }
    }

    return result
}

题解3

同样我们可以通过递归来实现

javascript
var sumOfLeftLeaves = function(root) {
    //采用后序遍历 递归遍历
    // 1. 确定递归函数参数
    const nodesSum = function(node) {
        // 2. 确定终止条件
        if(node === null) {
            return 0;
        }
        let leftValue = nodesSum(node.left);
        let rightValue = nodesSum(node.right);
        // 3. 单层递归逻辑
        //midValue 可以理解root节点的值,如果左子树有值,那么拿左子树的值赋值给root节点。
        let midValue = 0;
        if(node.left && node.left.left === null && node.left.right === null) {
            midValue = node.left.val;
        }
        let sum = midValue + leftValue + rightValue;
        return sum;
    }
    return nodesSum(root);
};

上次更新于: