LeetCode刷题笔记(树):minimum-depth-of-binary-tree

「爱情、让人受尽委屈。」 2022-05-31 04:29 254阅读 0赞

  • 转载请注明作者和出处:http://blog.csdn.net/u011475210
  • 代码地址:https://github.com/WordZzzz/Note/tree/master/LeetCode
  • 刷题平台:https://www.nowcoder.com/ta/leetcode
  • 题  库:Leetcode经典编程题
  • 编  者:WordZzzz

    • 题目描述
    • 解题思路
    • C版代码实现

      • 深度优先搜索
      • 广度优先搜索

题目描述

Given a binary tree, find its minimum depth.The minimum depth is the number of nodes along the shortest path from the root node down to the nearest leaf node.

给定一棵二叉树,找到它的最小深度。最小深度是沿着从根节点到最近叶节点的最短路径的节点数量。

解题思路

DFS和BFS都可以,但是很明显,BFS更快,因为BFS只要找到第一个叶子结点就可以停止遍历了看,而DFS需要通过迭代来遍历所有的结点。

这里我重点说一下BFS,循环的终止条件是now结点无左右子树,即size前后无变化。

C++版代码实现

深度优先搜索

  1. class Solution {
  2. public:
  3. int run(TreeNode *root) {
  4. if(root == NULL)
  5. return false;
  6. if(root->left == NULL)
  7. return run(root->right) + 1;
  8. if(root->right == NULL)
  9. return run(root->left) + 1;
  10. int leftDepth = run(root->left);
  11. int rightDepth = run(root->right);
  12. return min(leftDepth, rightDepth) + 1;
  13. }
  14. };

广度优先搜索

  1. class Solution {
  2. public:
  3. int run(TreeNode *root) {
  4. if(root == NULL)
  5. return false;
  6. queue<TreeNode *> que;
  7. TreeNode *last, *now;
  8. int level = 1, size = 0;
  9. last = now = root;
  10. que.push(root);
  11. while(!que.empty()){
  12. now = que.front();
  13. que.pop();
  14. size = que.size();
  15. if(now->left)
  16. que.push(now->left);
  17. if(now->right)
  18. que.push(now->right);
  19. if(que.size() == size) //循环终止条件
  20. break;
  21. if(last == now){
  22. level++;
  23. if(que.size() != 0)
  24. last = que.back();
  25. }
  26. }
  27. return level;
  28. }
  29. };

系列教程持续发布中,欢迎订阅、关注、收藏、评论、点赞哦~~( ̄▽ ̄~)~

完的汪(∪。∪)。。。zzz

发表评论

表情:
评论列表 (有 0 条评论,254人围观)

还没有评论,来说两句吧...

相关阅读

    相关 LeetCode笔记

    [23. Merge k Sorted Lists][] > 要点: > > 1. 学会数据结构PriorityQueue(优先队列)的用法, 通过给优先队列传入自定义