题目描述:
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/
9 20
/
15 7
返回它的最小深度 2.
思路分析:
一开始的思路是直接求二叉树的最小深度,后来发现题目限定了必须是到叶结点的路径长度最短。所以需要判断当前结点是否是叶结点。判断若左子树为空,则返回右子树的到叶子结点的最短路径;否则返回左子树到叶结点的最短路径。
代码:
1 /** 2 * Definition for a binary tree node. 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */ 10 class Solution { 11 public: 12 int height(TreeNode* root) 13 { 14 if(root == nullptr) 15 return 0; 16 if(root->left==nullptr) 17 return height(root->right)+1; 18 if(root->right == nullptr) 19 return height(root->left)+1; 20 int l = height(root->left); 21 int r = height(root->right); 22 return min(l,r)+1; 23 } 24 int minDepth(TreeNode* root) { 25 if(root == nullptr) 26 return 0; 27 return height(root); 28 } 29 };