111.cpp 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. * @Description:
  3. * @Version: 1.0
  4. * @Autor: zhuyijun
  5. * @Date: 2021-11-13 16:39:27
  6. * @LastEditTime: 2021-11-14 15:11:24
  7. */
  8. /*
  9. 给定一个二叉树,找出其最小深度。
  10. 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
  11. 说明:叶子节点是指没有子节点的节点。
  12. 示例 1:
  13. 输入:root = [3,9,20,null,null,15,7]
  14. 输出:2
  15. 示例 2:
  16. 输入:root = [2,null,3,null,4,null,5,null,6]
  17. 输出:5
  18. */
  19. #include <bits/stdc++.h>
  20. using namespace std;
  21. struct TreeNode {
  22. int val;
  23. TreeNode *left;
  24. TreeNode *right;
  25. TreeNode() : val(0), left(nullptr), right(nullptr) {}
  26. TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  27. TreeNode(int x, TreeNode *left, TreeNode *right)
  28. : val(x), left(left), right(right) {}
  29. };
  30. int minDepth(TreeNode *root) {
  31. if (root == nullptr) {
  32. return 0;
  33. }
  34. queue<TreeNode> q;
  35. q.push(*root);
  36. int depth = 1;
  37. while (!q.empty()) {
  38. int sz = q.size();
  39. for (int i = 0; i < sz; i++) {
  40. //获取队列第一位元素
  41. TreeNode cur = q.front();
  42. //移除队列中第一位元素
  43. q.pop();
  44. if (cur.left == nullptr && cur.right == nullptr) {
  45. return depth;
  46. }
  47. if (cur.left != nullptr) {
  48. q.push(*cur.left);
  49. }
  50. if (cur.right != nullptr) {
  51. q.push(*cur.right);
  52. }
  53. }
  54. depth++;
  55. }
  56. return depth;
  57. }
  58. int main() { return 0; }