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 };

 

posted @ 2014-05-01 23:09  linyx  阅读(162)  评论(0编辑  收藏  举报