题目描述
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。
借助队列,将树中结点按层压入,循环的终止条件是当前结点没有左右子树,也就是队列的长度在压入当前结点的左右子树前与压入后相同。
class Solution {
public:
int run(TreeNode *root) {
if(!root)
return 0;
queue<TreeNode* > q;
q.push(root);
int level = 1, size = 0;
TreeNode* pNode = root;
TreeNode* pLast = root;
while(!q.empty())
{
pNode = q.front();
q.pop();
size = q.size();
if(pNode->left)
q.push(pNode->left);
if(pNode->right)
q.push(pNode->right);
if(size == q.size())
break;
if(pNode == pLast)
{
++level;
pLast = q.back();
}
}
return level;
}
};
另一种解法:深度优先搜索,DFS。
深度优先搜索需要迭代来遍历所有结点,所以效率比BFS低。
class Solution {
public:
int run(TreeNode *root) {
if(!root)
return 0;
if(!root->left)
return run(root->right) + 1;
if(!root->right)
return run(root->left) + 1;
int left = run(root->left);
int right = run(root->right);
return 1 + min(left, right);
}
};