给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
采用基于递归的深度搜索算法。
深度搜索:首先找出所有从根节点到叶子节点的路径,再比较最小深度。
递归:需要定义递归函数。
/** * 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).