思路:这道题的话比较容易想通的,就利用队列进行层次遍历,每下一层就将高度+1,然后在每一层的遍历中,如果发现某个结点没有孩子结点,那么它就是高度最小的叶子结点, 由此得到这棵树的最小深度;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
int minDepth(TreeNode *root)
{
if (root == NULL) //该树为空 直接返回0
return 0;
queue<TreeNode *> q;
q.push(root); //把根结点放入队列
int result = 0;
while (!q.empty())
{
queue<TreeNode *> qq; //辅助层次队列
result++;
while (!q.empty())
{
TreeNode *now = q.front();
q.pop();
if (now->left == NULL && now->right == NULL) //如果当前结点没有孩子结点,直接就作为深度最小的叶子节点,返回深度值
return result;
if (now->left)//如果不是的话,就把它非空的孩子结点放入队列中
{
qq.push(now->left);
}
if (now->right)
{
qq.push(now->right);
}
}
q = qq;
}
return result;
}