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、本来是想利用层序遍历的,但是使用队列的时候内存超出了
2、因此后来实现了一个递归的方法。
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
/************************************************************************/
/*
层次遍历的方法
*/
/************************************************************************/
/*
int minDepth(TreeNode *root) {
queue<TreeNode *> qt;
if(root == NULL)
return 0;
else
qt.push(root);
root->val = 1;
int min = INT_MAX;
while(!qt.empty())
{
TreeNode *node = qt.front();
if(node->left!=NULL)
{
qt.push(node->left);
node->left->val = node->val + 1;
}
if(node->right!=NULL)
{
qt.push(node->right);
node->right->val = node->val + 1;
}
if(node->right == NULL && node->left == NULL)
{
if(node->val < min)
min = node->val;
}
}
return min;
}
*/
/************************************************************************/
/*
递归的方法
*/
/************************************************************************/
int minDepth(TreeNode *root) {
if(root == NULL)
return 0;
if(root->left == NULL && root->right == NULL)
return 1;
int leftDepth = 0;
int rightDepth = 0;
if(root->left!=NULL && root->right == NULL)
{
leftDepth = minDepth(root->left);
return leftDepth+1;
}
if(root->right!=NULL&&root->left == NULL)
{
rightDepth = minDepth(root->right);
return rightDepth+1;
}
if(root->right!=NULL&&root->left != NULL)
{
leftDepth = minDepth(root->left);
rightDepth = minDepth(root->right);
return leftDepth < rightDepth ? (leftDepth+1):(rightDepth+1);
}
}
int main(void)
{
system("pause");
return 0;
}