day16 二叉树的最小深度 左右节点都为空

int minDepth(TreeNode* root) {

        if (root == NULL) return 0;

        int depth = 0;

        queue que;

        que.push(root);

        while(!que.empty()) {

            int size = que.size();

            depth++; // 记录最小深度

            for (int i = 0; i < size; i++) {

                TreeNode* node = que.front();

                que.pop();

                if (node->left) que.push(node->left);

                if (node->right) que.push(node->right);

                if (!node->left && !node->right) {

// 当左右孩子都为空的时候,

说明是最低点的一层了,退出

                    return depth;

                }

            }

        }

        return depth;

    }

 

求二叉树的最小深度和求二叉树的最大深度的差别主要在于处理左右孩子不为空的逻辑。


    int getDepth(TreeNode* node) {
        if (node == NULL) return 0;
        int leftDepth = getDepth(node->left);           // 左
        int rightDepth = getDepth(node->right);         // 右
                                                        // 中
        // 当一个左子树为空,右不为空,

这时并不是最低点
        if (node->left == NULL && node->right != NULL) { 
            return 1 + rightDepth;
        }   
        // 当一个右子树为空,左不为空,

这时并不是最低点
        if (node->left != NULL && node->right == NULL) { 
            return 1 + leftDepth;
        }
        int result = 1 + min(leftDepth, rightDepth);
        return result;
    }

    int minDepth(TreeNode* root) {
        return getDepth(root);
    }

 

 

 

你可能感兴趣的:(算法)