C++LeetCode 每日一题 - 二叉树的最小深度

题目:二叉树的最小深度

Description

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

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

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

Sample

给定二叉树 [3,9,20,null,null,15,7],

   3
   / \
  9  20
    /  \
   15   7

返回它的最小深度 2.

Solution

简单题!遍历二叉树即可!因为是寻找最小深度,所以如果根节点为空的话,返回0,否则,如果根节点的左孩子和右孩子都为空,返回1。
当一棵树的根节点左孩子为空,右孩子不为空时,并不是从左孩子那里返回一个0,然后整棵树的最小深度就是1。并不是的!因为很显然根节点左孩子为空,右孩子不为空,那么只有在根节点的右孩子中才能找到叶子节点,这个树的最小深度是右子树的最小深度加1。
根节点左孩子不为空,右孩子为空时。同理 !
由此我们递归求解即可!

AC Code
class Solution {
public:
    int minDepth(TreeNode* root) {
        if(root==NULL) return 0;//根节点为空
        else if(root->left==NULL&&root->right==NULL) return 1;//根节点的左孩子和右孩子都为空
        else if(root->left&&root->right==NULL) return minDepth(root->left)+1;//根节点左孩子不为空,右孩子为空
        else if(root->left==NULL&&root->right) return minDepth(root->right)+1;//根节点左孩子为空,右孩子不为空
        else{//根节点左右孩子都不为空
            int dep=min(minDepth(root->left),minDepth(root->right))+1;
            return dep;
        }
    }
};

你可能感兴趣的:(简单算法题—LeetCode,二叉树,leetcode)