cv_gordon

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

 

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

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

采用基于递归的深度搜索算法。

深度搜索:首先找出所有从根节点到叶子节点的路径,再比较最小深度。

递归:需要定义递归函数

/**
 * Definition for a binary tree node.
 * 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;
        
        int result = 0, left = 0, right = 0;
        left = minDepth(root->left);
        right = minDepth(root->right);

        if (left == 0 || right == 0)
            result = 1 + max(left, right);
        else
            result  = 1 + min(left, right);
        
        return result;
    }
};

 

复杂度分析:

时间复杂度:节点个数为N。每个节点访问一次,O(n).

空间复杂度:最坏情况下,N个节点构成非平衡树,每个节点只有1个孩子,这时候递归调用N次(树的高度),此时栈的空间开销为O(n). 最理想情况下,N个节点构成完全平衡树,树的高度为logN,栈的空间开销为O(logN).

 

posted on 2019-08-18 11:52  cv_gordon  阅读(137)  评论(0编辑  收藏  举报