BFS所求得一定是最短路径,解决问题的时候只需要将对应的想为一个图即可!
大致的代码框架如下:
class Solution {
public:
int minDepth(TreeNode* root) {
queue<TreeNode*>q;
q.push(root);
int depth = 1;
if(!root) return 0;
while(!q.empty()) {
int size = q.size();
for(int i=0; i < size; i++) { //必须对当前节点出发的全部节点遍历!
TreeNode* cur = q.front();
if(cur -> left == NULL && cur -> right == NULL) {
return depth;
}
if(cur -> left != NULL) {
q.push(cur -> left);
}
if(cur -> right != NULL) {
q.push(cur -> right);
}
q.pop();
}
depth ++; //更新depth的地方必须在这里
}
return depth;
}
};
因为BFS算法总是慢慢的开始的,从初始节点开始每一次都是递进一步,将与其相邻的节点全部访问,然后继续下去,如果到达target的时候总是将原先都出发走了一次,所以对于其它的问题的处理的时候可以很好的利用BFS的思路去解决问题。