算法挑战42: 二叉树的最小深度

1 阅读1分钟

题目:

给定一个二叉树,找出其最小深度。

最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

说明: 叶子节点是指没有子节点的节点

思路:

第一种,自上而下递

维护一个深度变量,遍历到叶子节点时更新最小值

第二种,自下而上归

  • 空树:深度为 0。
  • 单边路:必须走有孩子的那一边(不能把空的那一边当成终点)。
  • 双边路:哪边近走哪边(取最小值)。

代码:

var minDepth = function (root) {
    let res = Infinity;
    // let depth = 1;

    function traverse(node, depth) {
        if (!node || depth >= res) return;//优化
        depth++;
        if (node.left === null && node.right === null) {
            res = Math.min(depth, res);
            return;
        }

        traverse(node.left, depth);
        traverse(node.right, depth);
        // depth--;
    }
    traverse(root, 0);
    return root ? res : 0;
};

思路二

var minDepth = function(root) {
    if(!root){
        return 0;
    }
    //遇到非叶子节点
    if(root.right === null){
        return minDepth(root.left) + 1;
    }
    if(root.left === null){
        return minDepth(root.right) + 1;
    }
    return Math.min(minDepth(root.left),minDepth(root.right)) + 1;
};