111. Minimum Depth of Binary Tree

来源:互联网 发布:淘宝 安能小包发货 编辑:程序博客网 时间:2024/06/13 12:51

要求:Given a binary tree, find its minimum depth.

The minimum depth is the number of nodes along the shortest pathfrom the root node down to the nearest leaf node.

he number of nodes along the shortest pathfrom the root node down to the nearest leaf node.

/**

 * Definitionfor a binary tree node.

 *struct TreeNode {

 *    int val;

 *    TreeNode *left;

 *    TreeNode *right;

 *    TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

方法一:非递归

思路:层序遍历二叉树,遇见叶子节点立马返回已遍历的层数。

class Solution {

public:

   int minDepth(TreeNode* root) {

       if(root==NULL)

       {

           return 0;

       }

       queue<TreeNode*>myq;

       int res=0,n=0;

       myq.push(root);

       TreeNode*p=NULL;

       while(!myq.empty())

       {

           n=myq.size();//n是某层的节点个数

           ++res;

           for(int i=0;i<n;i++)//处理该层数据。

           {

                p=myq.front();//每一层一层的处理

                myq.pop();

                if(p->left!=NULL)

                {

                    myq.push(p->left);

                }

                if(p->right!=NULL)

                {

                    myq.push(p->right);

                }

               if((p->left==NULL)&&(p->right==NULL))

                {

                    return res;

                }

           }

       }

       return res;

    }

};

方法二:

递归解法。

class Solution {

public:

   int minDepth(TreeNode* root) {

       if(root==NULL)

       {

           return 0;

       }

       if(root->left==NULL&&root->right==NULL)

       {

           return 1;

       }

       int left=INT_MAX,right=INT_MAX;

       if(root->left)

        left=minDepth(root->left);

        if(root->right)

        right=minDepth(root->right);

       return min(left,right)+1;

    }

class Solution {
public:
    int minDepth(TreeNode *root) {
        if(!root) return 0;
        if(!root->left) return 1 + minDepth(root->right);
        if(!root->right) return 1 + minDepth(root->left);
        return 1+min(minDepth(root->left),minDepth(root->right));
    }
};

原创粉丝点击