<LeetCode>111. 二叉树的最小深度

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

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

解题思路:

这题我想了很久。。大概还是对递归不太熟悉吧。下面讲解一下递归的思路——

1.如果根节点是NULL,说明没有深度。

2.如果节点的左右儿子都不存在,说明只有自己,节点深度为1.

3.如果节点没有左儿子,但是有右儿子怎么办?那说明最小深度只能在右儿子处获得。这里需要理解一下逻辑,如果一个节点有左儿子,但是没有右儿子,说明这个节点不是叶节点,说明本节点不可能是最小深度,最小深度肯定比本节点要大。(只考虑这一部分的话)叶子只可能出现在右儿子及右儿子的儿子们,所以,要对右儿子做递归。

4.递归之后为什么要+1呢?因为每返回一次,说明深度+1。

5.同样的,如果没有右儿子,只有左儿子,那么应该对左儿子进行递归。

6.最后,选择左右深度较小的那一个,并且+1。哎?4的过程中不是+1了么,为什么还要+1?因为不+1的话返回不到根节点,只能到根节点的下一次节点。可以手工试验一下,就明白了。

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    int minDepth(TreeNode *root) {
        if (root == NULL) return 0;
        if (root->left == NULL && root->right == NULL) return 1;
        
        if (root->left == NULL) return minDepth(root->right) + 1;
        else if (root->right == NULL) return minDepth(root->left) + 1;
        else return 1 + min(minDepth(root->left), minDepth(root->right));
    }
    
};


阅读更多
个人分类: LeetCode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭