zoukankan      html  css  js  c++  java
  • 【Leetcode】二叉树的最小深度

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

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

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

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

    递归:需要定义递归函数

    /**
     * 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).

  • 相关阅读:
    c# 使用Selenium模拟登录和操作数据的学习记录【续】
    c# 使用Selenium模拟登录和操作数据的学习记录
    使用bat一键安装mysql
    使用c#程序 添加iis网站目录的用户权限
    NOIp游记
    线规集合
    背包规划集合
    阴间扫描线
    11.30数学集合
    高精度运算
  • 原文地址:https://www.cnblogs.com/gdut-gordon/p/11371900.html
Copyright © 2011-2022 走看看