题目
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
输入
root = [3,9,20,null,null,15,7]
输出
2
输入
root = [2,null,3,null,4,null,5,null,6]
输出
5
解题思路1: 深搜
代码1
1 2 3 4 5 6 7 8
| class Solution { public int minDepth(TreeNode root) { if (root == null) return 0; else if (root.left == null) return minDepth(root.right) + 1; else if (root.right == null) return minDepth(root.left) + 1; else return Math.min(minDepth(root.left), minDepth(root.right)) + 1; } }
|
解题思路2: 宽搜
代码2
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
class Solution { public: int minDepth(TreeNode* root) { if(root==NULL) return 0; int deep=1; bfs(root,deep); return deep; } void bfs(TreeNode* root,int &deep) { queue<TreeNode *> q; q.push(root); TreeNode* end=root; int level=1; while(!q.empty()) { TreeNode* p = q.front(); q.pop(); if(p->left==NULL&&p->right==NULL) { deep=level; return; } if(p->left){q.push(p->left);} if(p->right){q.push(p->right);} if(p==end) { end = q.back(); level++; } } } };
|