The problem description:
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.
这个题目本身不是很难,二叉树的广搜找到最浅的那个子树。但这个题目是比较典型的再广搜的时候需要记录或者使用到当前深度信息,所以我们需要一层一层来处理,而不是
单纯的都放在队列里面,处理完为止。处理的时候,使用了2个队列,分别保存前后两层的节点。
1 /** 2 * Definition for binary tree 3 * struct TreeNode { 4 * int val; 5 * TreeNode *left; 6 * TreeNode *right; 7 * TreeNode(int x) : val(x), left(NULL), right(NULL) {} 8 * }; 9 */10 class Solution {11 public:12 int minDepth(TreeNode *root) {13 if(root==NULL) return 0;14 int minDepth =1;15 queueoutq,intq;16 outq.push(root);17 TreeNode* nd;18 while(!outq.empty())19 {20 nd = outq.front();21 outq.pop();22 if(nd->left==NULL && nd->right ==NULL)23 return minDepth;24 if(nd->left!=NULL) intq.push(nd->left);25 if(nd->right!=NULL) intq.push(nd->right);26 27 if(outq.empty()) 28 {29 swap(intq,outq);30 minDepth++;31 }32 33 }34 return minDepth;35 36 }37 };
注意,在处理的时候要保证没有空节点(NULL)被放进去了,不然可能导致外层outq在没有被内层赋值时,就被判断为空而跳出。