【LeetCode】Minimum Depth Of Binary Tree二叉树的最小深度

来源:互联网 发布:手机淘宝没有评价订单 编辑:程序博客网 时间:2024/06/11 11:16

二叉树的最小深度
给定一个二叉树,找出其最小深度。

二叉树的最小深度为根节点到最近叶子节点的距离。

样例给出一棵如下的二叉树:        1     /     \    2       3          /    \        4      5  这个二叉树的最小深度为 2

标签
二叉树 深度优先搜索

(1)Java

package BinaryTree;import java.util.LinkedList;import java.util.Queue;//Version1: Recursionpublic class MinimumDepthOfBinaryTree {    public int minDepth(TreeNode root) {        if(root == null){            return 0;        }        return getMin(root);    }    private int getMin(TreeNode root){        if(root == null){            return Integer.MAX_VALUE;        }        if(root.left == null && root.right == null){//leaf            return 1;        }        return Math.min(getMin(root.left),getMin(root.right)) + 1;    }}//Version 2: Divide & Conquerclass Solution {    public int minDepth(TreeNode root) {        if(root==null)return 0;        int left = minDepth(root.left);        int right = minDepth(root.right);        if(left == 0 && right == 0){            return 1;        }else if(left == 0){            left = right;        }else if(right == 0){            right = left;        }        return Math.min(left, right) + 1;    }}//Version 3: Non-Recursionpublic class Solution {    /*     * @param root: The root of binary tree     * @return: An integer     */    public int minDepth(TreeNode root) {        if (root == null) {            return 0;        }        Queue<TreeNode> queue = new LinkedList<>();        queue.offer(root);        int depth = 0;        while (!queue.isEmpty()) {            int size = queue.size();            depth++;            for (int i = 0; i < size; i++) {                TreeNode node = queue.poll();                if (node.left == null && node.right == null) {                    return depth;                }                if (node.left != null) {                    queue.offer(node.left);                }                if (node.right != null) {                    queue.offer(node.right);                }            }        }        return 0;    }} //Version 3 class Solution {     public int minDepth(TreeNode root) {         if(root==null)return 0;         int left = minDepth(root.left);         int right = minDepth(root.right);         if(left == 0 && right == 0){             return 1;         }else if(left == 0){             left = right;         }else if(right == 0){             right = left;         }         return Math.min(left, right) + 1;     } }

(2)C++

#include <algorithm>class Solution {public:    int getMin(TreeNode* root){        if(root == NULL){            return 0x7fffffff;        }         if(!root->left && !root->right){//leaf            return 1;        }        return min(getMin(root->left), getMin(root->right)) + 1;    }    int minDepth(TreeNode * root) {        if(!root){            return 0;        }         return getMin(root);    }};
阅读全文
0 0
原创粉丝点击