111. 二叉树的最小深度

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

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

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

示例 1:

111. 二叉树的最小深度_第1张图片

输入:root = [3,9,20,null,null,15,7]
输出:2

示例 2:

输入:root = [2,null,3,null,4,null,5,null,6]
输出:5

错误点:

1、虽然考虑了根节点的左节点或者右节点有为空情况。但是执行的操作不对。下面代码显示最终结果基本一直为1;因为两个if,每次遍历只有唯一解,即某一个leftdep或者rightdep为0,最终结果还是为0;应该要每一次遍历到,而不是分情况遍历。

class Solution {
public:
    int dfs(TreeNode* root){ // 左右中
    //怎么让编译器知道单边
        if(!root) return 0;
        int leftdep = 0,rightdep = 0;
        if(root->left && !root->right){
            leftdep = dfs(root->left);
        }
        if(!root->left && root->right){
            rightdep = dfs(root->right);
        }
        return 1+min(leftdep,rightdep);
    }
    int minDepth(TreeNode* root) {
        //dfs
        return dfs(root);
    }
};

请写出两种方法 

class Solution {
public:
    int minDepth(TreeNode* root) {
        //bfs
        queueque;
        int count = 0;

        if(!root) return count;
        que.push(root);
        while(!que.empty()){
            int num = que.size();
            count++;
            while(num--){
                TreeNode* node = que.front();
                que.pop();
                if(node->left == nullptr && node->right == nullptr){
                    return count;
                }
                if(node->left) que.push(node->left);
                if(node->right) que.push(node->right);
            }
        }
        return count;
    }
};

//dfs
class Solution {
public:
    int dfs(TreeNode* root){ // 左右中
    //怎么让编译器知道单边
        if(!root) return 0;
        int leftdep =  dfs(root->left);
        int rightdep = dfs(root->right);
        if(root->left && !root->right){
            return 1 + leftdep;
        }
        if(!root->left && root->right){
            return 1 + rightdep;
        }
        return 1+min(leftdep,rightdep);
    }
    int minDepth(TreeNode* root) {
        //dfs
        return dfs(root);
    }
};

 

你可能感兴趣的:(leetcode练习,算法)