• Leetcode | Minimum/Maximum Depth of Binary Tree


    Minimum Depth of Binary Tree

    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.

    BFS碰到一个叶子结点就可以了。

     1 class Solution {
     2 public:
     3     int minDepth(TreeNode *root) {
     4         if (root == NULL) return NULL;
     5         
     6         queue<TreeNode*> q;
     7         q.push(root);
     8         q.push(NULL);
     9         int h = 1;
    10         while (q.size() > 1) {
    11             TreeNode* p = q.front();
    12             q.pop();
    13             
    14             if (p == NULL) { h++; q.push(NULL); continue;}
    15             if (p->left == NULL && p->right == NULL) break;
    16             if (p->left) q.push(p->left);
    17             if (p->right) q.push(p->right);
    18         }
    19         return h;
    20     }
    21     
    22 };

    这里用个NULL指针作哨兵,作为层的结束标志。所有遍历完时,q.size() == 1(q里面只有NULL一个点)。 不过这里因为只要到达叶子结点就会退出,所以不存在死循环的问题。

    第三次,bugfree一遍通过。

     1 class Solution {
     2 public:
     3     int minDepth(TreeNode *root) {
     4         if (root == NULL) return 0;
     5         vector<vector<TreeNode*> > layers(2);
     6         int cur = 0, next = 1, layer = 1;
     7         layers[cur].push_back(root);
     8         while (!layers[cur].empty()) {
     9             layers[next].clear();
    10             for (auto node: layers[cur]) {
    11                 if (node->left == NULL && node->right == NULL) return layer;
    12                 if (node->left) layers[next].push_back(node->left);
    13                 if (node->right) layers[next].push_back(node->right);
    14             }
    15             cur = !cur, next = !next;
    16             layer++;
    17         }
    18         return layer;
    19     }
    20 };

     Maximum Depth of Binary Tree

    同样是用bfs好记录层数,然后bfs结束返回值就行了。 

     1 class Solution {
     2 public:
     3     int maxDepth(TreeNode *root) {
     4         if (root == NULL) return 0;
     5         vector<vector<TreeNode*> > layers(2);
     6         int cur = 0, next = 1, layer = 0;
     7         layers[cur].push_back(root);
     8         while (!layers[cur].empty()) {
     9             layers[next].clear();
    10             for (auto node: layers[cur]) {
    11                 if (node->left) layers[next].push_back(node->left);
    12                 if (node->right) layers[next].push_back(node->right);
    13             }
    14             cur = !cur, next = !next;
    15             layer++;
    16         }
    17         return layer;
    18     }
    19 };
  • 相关阅读:
    RDay2-Problem 2 B
    杭电 1862 EXCEL排序(sort+结构体)
    杭电 2803 The MAX(sort)
    杭电 5053 the Sum of Cube(求区间内的立方和)打表法
    杭电 2089 不要62
    杭电 4548 美素数(素数打表)
    杭电2098 分拆素数和
    杭电1722 Cake (分蛋糕)
    素数判定 (素数打表)
    最小公倍数
  • 原文地址:https://www.cnblogs.com/linyx/p/3703449.html
Copyright © 2020-2023  润新知