题目描述:
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.(从根节点到叶节点经过的最短路径经过的节点数)
实现:
1.递归
class Solution {
public:
int run(TreeNode *root) {
if(root==NULL)
return 0;
int depthl=run(root->left);
int depthr=run(root->right);
if(depthl==0&&depthr==0)
return 1;
if(depthl==0)
depthl=INT_MAX;//没有左节点一定不是该路径
if(depthr==0)
depthr=INT_MAX;
return min(depthl,depthr)+1;
}
};
2.非递归
按广度优先遍历(按层次遍历),若某一层出现了叶节点就返回其深度。
int run(TreeNode *root) {
queue<pair<TreeNode*, int>> q;
if(root == NULL) return 0;
q.push(make_pair(root,1));
while(!q.empty()){
pair<TreeNode*, int> cur = q.front();
q.pop();
if(!cur.first->left && !cur.first->right) return cur.second;
if(cur.first->left)
q.push(make_pair(cur.first->left,cur.second+1));
if(cur.first->right)
q.push(make_pair(cur.first->right,cur.second+1));
}
}
其中用到了STL容器类。