LeetCode111.二叉树的最小深度

BFS来解决,主要就是层数的计算,不能重复计算,可以预先计算好当前层需要跑几次,归定好次数后就可以控制queue

    //使用BFS来做最短距离
    function minDepth($root) {
        if(!$root){
            return 0;
        }
        $step = 0;
        $queue[] = $root;
        while(count($queue)){
            $step++;
            $needRunTimes = count($queue);
            //每一层只能加一次。一层左边有,右边每有,step只能加1。比如左边有,右边没有的时候,所以array_shift的时候,不能重复加到queue中去
            for($j = 0; $j < $needRunTimes; $j++){//!!!!!这里的needRunTimes不能直接用count($queue),因为里面一直在被修改!!!!!!!!
                $currDel = array_shift($queue);
                if($currDel->left){
                    $queue[] = $currDel->left;
                }
                if($currDel->right){
                    $queue[] = $currDel->right;
                }

                if($currDel->left == null && $currDel->right == null){
                    return $step;
                }
            }
            
        }
        return $step;
    }

你可能感兴趣的:(LeetCode111.二叉树的最小深度)