Encuentra la profundidad mínima de un árbol binario

Dado un árbol binario, encuentre su profundidad mínima. La profundidad mínima es el número de Nodes a lo largo del camino más corto desde el Node raíz hasta el Node hoja más cercano. 

Por ejemplo, la altura mínima debajo del árbol binario es 2. 
 

C++

// C++ program to find minimum depth of a given Binary Tree
#include<bits/stdc++.h>
using namespace std;
 
// A BT Node
struct Node
{
    int data;
    struct Node* left, *right;
};
 
int minDepth(Node *root)
{
    // Corner case. Should never be hit unless the code is
    // called on root = NULL
    if (root == NULL)
        return 0;
 
    // Base case : Leaf Node. This accounts for height = 1.
    if (root->left == NULL && root->right == NULL)
    return 1;
   
    int l = INT_MAX, r = INT_MAX;
    // If left subtree is not NULL, recur for left subtree
   
    if (root->left)
    l = minDepth(root->left);
 
    // If right subtree is not NULL, recur for right subtree
    if (root->right)
    r =  minDepth(root->right);
 
  //height will be minimum of left and right height +1
    return min(l , r) + 1;
}
 
// Utility function to create new Node
Node *newNode(int data)
{
    Node *temp = new Node;
    temp->data = data;
    temp->left = temp->right = NULL;
    return (temp);
}
 
// Driver program
int main()
{
    // Let us construct the Tree shown in the above figure
    Node *root     = newNode(1);
    root->left     = newNode(2);
    root->right     = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    cout <<"The minimum depth of binary tree is : "<< minDepth(root);
    return 0;
}

C

// C program to find minimum depth of a given Binary Tree
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
 
// A BT Node
typedef struct Node {
    int data;
    struct Node *left, *right;
} Node;
 
int min(int num1, int num2)
{
    return (num1 > num2) ? num2 : num1;
}
 
int minDepth(Node* root)
{
    // Corner case. Should never be hit unless the code is
    // called on root = NULL
    if (root == NULL)
        return 0;
 
    // Base case : Leaf Node. This accounts for height = 1.
    if (root->left == NULL && root->right == NULL)
        return 1;
    int l = INT_MAX;
    int r = INT_MIN;
    // If left subtree is not NULL, recur for left subtree
 
    if (root->left)
        l = minDepth(root->left);
 
    // If right subtree is not NULL, recur for right subtree
    if (root->right)
        r = minDepth(root->right);
 
    // height will be minimum of left and right height +1
    return min(l, r) + 1;
}
 
// Utility function to create new Node
Node* newNode(int data)
{
    Node* temp = (Node*)malloc(sizeof(Node));
    temp->data = data;
    temp->left = temp->right = NULL;
    return (temp);
}
 
// Driver program
int main()
{
    // Let us construct the Tree shown in the above figure
    Node* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
    printf("The minimum depth of binary tree is : %d",
           minDepth(root));
    return 0;
}
 
// This code is contributed by aditya kumar (adityakumar129)

Java

/* Java implementation to find minimum depth
   of a given Binary tree */
 
/* Class containing left and right child of current
node and key value*/
class Node
{
    int data;
    Node left, right;
    public Node(int item)
    {
        data = item;
        left = right = null;
    }
}
public class BinaryTree
{
    //Root of the Binary Tree
    Node root;
 
    int minimumDepth()
    {
        return minimumDepth(root);
    }
 
    /* Function to calculate the minimum depth of the tree */
    int minimumDepth(Node root)
    {
        // Corner case. Should never be hit unless the code is
        // called on root = NULL
        if (root == null)
            return 0;
 
        // Base case : Leaf Node. This accounts for height = 1.
        if (root.left == null && root.right == null)
            return 1;
 
        // If left subtree is NULL, recur for right subtree
        if (root.left == null)
            return minimumDepth(root.right) + 1;
 
        // If right subtree is NULL, recur for left subtree
        if (root.right == null)
            return minimumDepth(root.left) + 1;
 
        return Math.min(minimumDepth(root.left),
                        minimumDepth(root.right)) + 1;
    }
 
    /* Driver program to test above functions */
    public static void main(String args[])
    {
        BinaryTree tree = new BinaryTree();
        tree.root = new Node(1);
        tree.root.left = new Node(2);
        tree.root.right = new Node(3);
        tree.root.left.left = new Node(4);
        tree.root.left.right = new Node(5);
 
        System.out.println("The minimum depth of "+
          "binary tree is : " + tree.minimumDepth());
    }
}

Python3

# Python program to find minimum depth of a given Binary Tree
 
# Tree node
class Node:
    def __init__(self , key):
        self.data = key
        self.left = None
        self.right = None
 
def minDepth(root):
    # Corner Case.Should never be hit unless the code is
    # called on root = NULL
    if root is None:
        return 0
     
    # Base Case : Leaf node.This accounts for height = 1
    if root.left is None and root.right is None:
        return 1
     
    # If left subtree is Null, recur for right subtree
    if root.left is None:
        return minDepth(root.right)+1
     
    # If right subtree is Null , recur for left subtree
    if root.right is None:
        return minDepth(root.left) +1
     
    return min(minDepth(root.left), minDepth(root.right))+1
 
# Driver Program
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print (minDepth(root))
 
# This code is contributed by Nikhil Kumar Singh(nickzuck_007)       

C#

using System;
 
/* C# implementation to find minimum depth
   of a given Binary tree */
 
/* Class containing left and right child of current
node and key value*/
public class Node
{
    public int data;
    public Node left, right;
    public Node(int item)
    {
        data = item;
        left = right = null;
    }
}
public class BinaryTree
{
    //Root of the Binary Tree
    public Node root;
 
    public virtual int minimumDepth()
    {
        return minimumDepth(root);
    }
 
    /* Function to calculate the minimum depth of the tree */
    public virtual int minimumDepth(Node root)
    {
        // Corner case. Should never be hit unless the code is
        // called on root = NULL
        if (root == null)
        {
            return 0;
        }
 
        // Base case : Leaf Node. This accounts for height = 1.
        if (root.left == null && root.right == null)
        {
            return 1;
        }
 
        // If left subtree is NULL, recur for right subtree
        if (root.left == null)
        {
            return minimumDepth(root.right) + 1;
        }
 
        // If right subtree is NULL, recur for left subtree
        if (root.right == null)
        {
            return minimumDepth(root.left) + 1;
        }
 
        return Math.Min(minimumDepth(root.left), minimumDepth(root.right)) + 1;
    }
 
    /* Driver program to test above functions */
    public static void Main(string[] args)
    {
        BinaryTree tree = new BinaryTree();
        tree.root = new Node(1);
        tree.root.left = new Node(2);
        tree.root.right = new Node(3);
        tree.root.left.left = new Node(4);
        tree.root.left.right = new Node(5);
 
        Console.WriteLine("The minimum depth of binary tree is : " + tree.minimumDepth());
    }
}
 
  // This code is contributed by Shrikant13

Javascript

<script>
/* javascript implementation to find minimum depth
   of a given Binary tree */
 
/* Class containing left and right child of current
node and key value*/
class Node {
    constructor(item) {
        this.data = item;
        this.left = this.right = null;
    }
}
    // Root of the Binary Tree
    let root;
 
    function minimumDepth() {
        return minimumDepth(root);
    }
 
    /* Function to calculate the minimum depth of the tree */
    function minimumDepth( root) {
        // Corner case. Should never be hit unless the code is
        // called on root = NULL
        if (root == null)
            return 0;
 
        // Base case : Leaf Node. This accounts for height = 1.
        if (root.left == null && root.right == null)
            return 1;
 
        // If left subtree is NULL, recur for right subtree
        if (root.left == null)
            return minimumDepth(root.right) + 1;
 
        // If right subtree is NULL, recur for left subtree
        if (root.right == null)
            return minimumDepth(root.left) + 1;
 
        return Math.min(minimumDepth(root.left), minimumDepth(root.right)) + 1;
    }
 
    /* Driver program to test above functions */
     
         
        root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.left.right = new Node(5);
 
        document.write("The minimum depth of "
        + "binary tree is : " + minimumDepth(root));
 
 
// This code contributed by aashish1995
</script>

C++

// C++ program to find minimum depth of a given Binary Tree
#include<bits/stdc++.h>
using namespace std;
 
// A Binary Tree Node
struct Node
{
    int data;
    struct Node *left, *right;
};
 
// A queue item (Stores pointer to node and an integer)
struct qItem
{
   Node *node;
   int depth;
};
 
// Iterative method to find minimum depth of Binary Tree
int minDepth(Node *root)
{
    // Corner Case
    if (root == NULL)
        return 0;
 
    // Create an empty queue for level order traversal
    queue<qItem> q;
 
    // Enqueue Root and initialize depth as 1
    qItem qi = {root, 1};
    q.push(qi);
 
    // Do level order traversal
    while (q.empty() == false)
    {
       // Remove the front queue item
       qi = q.front();
       q.pop();
 
       // Get details of the remove item
       Node *node = qi.node;
       int depth = qi.depth;
 
       // If this  is the first leaf node seen so far
       // Then return its depth as answer
       if (node->left == NULL && node->right == NULL)
          return depth;
 
       // If left subtree is not NULL, add it to queue
       if (node->left != NULL)
       {
          qi.node  = node->left;
          qi.depth = depth + 1;
          q.push(qi);
       }
 
       // If right subtree is not NULL, add it to queue
       if (node->right != NULL)
       {
          qi.node  = node->right;
          qi.depth = depth+1;
          q.push(qi);
       }
    }
    return 0;
}
 
// Utility function to create a new tree Node
Node* newNode(int data)
{
    Node *temp = new Node;
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}
 
// Driver program to test above functions
int main()
{
    // Let us create binary tree shown in above diagram
    Node *root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->left->right = newNode(5);
 
    cout << minDepth(root);
    return 0;
}

Java

// Java program to find minimum depth
// of a given Binary Tree
import java.util.*;
class GFG
{
     
// A binary Tree node
static class Node
{
    int data;
    Node left, right;
}
 
// A queue item (Stores pointer to
// node and an integer)
static class qItem
{
    Node node;
    int depth;
 
    public qItem(Node node, int depth)
    {
        this.node = node;
        this.depth = depth;
    }
}
 
// Iterative method to find
// minimum depth of Binary Tree
static int minDepth(Node root)
{
    // Corner Case
    if (root == null)
        return 0;
 
    // Create an empty queue for level order traversal
    Queue<qItem> q = new LinkedList<>();
 
    // Enqueue Root and initialize depth as 1
    qItem qi = new qItem(root, 1);
    q.add(qi);
 
    // Do level order traversal
    while (q.isEmpty() == false)
    {
        // Remove the front queue item
        qi = q.peek();
        q.remove();
     
        // Get details of the remove item
        Node node = qi.node;
        int depth = qi.depth;
     
        // If this is the first leaf node seen so far
        // Then return its depth as answer
        if (node.left == null && node.right == null)
            return depth;
     
        // If left subtree is not null,
        // add it to queue
        if (node.left != null)
        {
            qi.node = node.left;
            qi.depth = depth + 1;
            q.add(qi);
        }
     
        // If right subtree is not null,
        // add it to queue
        if (node.right != null)
        {
            qi.node = node.right;
            qi.depth = depth + 1;
            q.add(qi);
        }
    }
    return 0;
}
 
// Utility function to create a new tree Node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = temp.right = null;
    return temp;
}
 
// Driver Code
public static void main(String[] args)
{
    // Let us create binary tree shown in above diagram
    Node root = newNode(1);
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(4);
    root.left.right = newNode(5);
 
    System.out.println(minDepth(root));
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python program to find minimum depth of a given Binary Tree
 
# A Binary Tree node
class Node:
    # Utility to create new node
    def __init__(self , data):
        self.data = data
        self.left = None
        self.right = None
 
def minDepth(root):
    # Corner Case
    if root is None:
         return 0
 
    # Create an empty queue for level order traversal
    q = []
     
    # Enqueue root and initialize depth as 1
    q.append({'node': root , 'depth' : 1})
 
    # Do level order traversal
    while(len(q)>0):
        # Remove the front queue item
        queueItem = q.pop(0)
     
        # Get details of the removed item
        node = queueItem['node']
        depth = queueItem['depth']
        # If this is the first leaf node seen so far
        # then return its depth as answer
        if node.left is None and node.right is None:   
            return depth
         
        # If left subtree is not None, add it to queue
        if node.left is not None:
            q.append({'node' : node.left , 'depth' : depth+1})
 
        # if right subtree is not None, add it to queue
        if node.right is not None: 
            q.append({'node': node.right , 'depth' : depth+1})
 
# Driver program to test above function
# Lets construct a binary tree shown in above diagram
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
print (minDepth(root))
 
# This code is contributed by Nikhil Kumar Singh(nickzuck_007)

C#

// C# program to find minimum depth
// of a given Binary Tree
using System;
using System.Collections.Generic;
     
class GFG
{
     
// A binary Tree node
public class Node
{
    public int data;
    public Node left, right;
}
 
// A queue item (Stores pointer to
// node and an integer)
public class qItem
{
    public Node node;
    public int depth;
 
    public qItem(Node node, int depth)
    {
        this.node = node;
        this.depth = depth;
    }
}
 
// Iterative method to find
// minimum depth of Binary Tree
static int minDepth(Node root)
{
    // Corner Case
    if (root == null)
        return 0;
 
    // Create an empty queue for
    // level order traversal
    Queue<qItem> q = new Queue<qItem>();
 
    // Enqueue Root and initialize depth as 1
    qItem qi = new qItem(root, 1);
    q.Enqueue(qi);
 
    // Do level order traversal
    while (q.Count != 0)
    {
        // Remove the front queue item
        qi = q.Peek();
        q.Dequeue();
     
        // Get details of the remove item
        Node node = qi.node;
        int depth = qi.depth;
     
        // If this is the first leaf node
        // seen so far.
        // Then return its depth as answer
        if (node.left == null &&
            node.right == null)
            return depth;
     
        // If left subtree is not null,
        // add it to queue
        if (node.left != null)
        {
            qi.node = node.left;
            qi.depth = depth + 1;
            q.Enqueue(qi);
        }
     
        // If right subtree is not null,
        // add it to queue
        if (node.right != null)
        {
            qi.node = node.right;
            qi.depth = depth + 1;
            q.Enqueue(qi);
        }
    }
    return 0;
}
 
// Utility function to create a new tree Node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = temp.right = null;
    return temp;
}
 
// Driver Code
public static void Main(String[] args)
{
    // Let us create binary tree
    // shown in above diagram
    Node root = newNode(1);
    root.left = newNode(2);
    root.right = newNode(3);
    root.left.left = newNode(4);
    root.left.right = newNode(5);
 
    Console.WriteLine(minDepth(root));
}
}
 
// This code is contributed by PrinciRaj1992

Javascript

<script>
 
// Javascript program to find minimum depth
// of a given Binary Tree
class Node
{
     
    // Utility function to create a new tree Node
    constructor(data)
    {
        this.data = data;
        this.left = this.right = null;
    }
}
 
class qItem
{
    constructor(node,depth)
    {
        this.node = node;
        this.depth = depth;
    }
}
 
function minDepth(root)
{
     
    // Corner Case
    if (root == null)
        return 0;
         
    // Create an empty queue for
    // level order traversal
    let q = [];
  
    // Enqueue Root and initialize depth as 1
    let qi = new qItem(root, 1);
    q.push(qi);
  
    // Do level order traversal
    while (q.length != 0)
    {
         
        // Remove the front queue item
        qi = q.shift();
         
        // Get details of the remove item
        let node = qi.node;
        let depth = qi.depth;
      
        // If this is the first leaf node seen so far
        // Then return its depth as answer
        if (node.left == null && node.right == null)
            return depth;
      
        // If left subtree is not null,
        // add it to queue
        if (node.left != null)
        {
            qi.node = node.left;
            qi.depth = depth + 1;
            q.push(qi);
        }
      
        // If right subtree is not null,
        // add it to queue
        if (node.right != null)
        {
            qi.node = node.right;
            qi.depth = depth + 1;
            q.push(qi);
        }
    }
    return 0;
}
 
// Driver Code
 
// Let us create binary tree shown
// in above diagram
let root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
 
document.write(minDepth(root));
 
// This code is contributed by rag2127
 
</script>

C++

/* C++ implementation to find minimum depth
of a given Binary tree */
#include <iostream>
#include<math.h>
using namespace std;
 
struct Node 
{
  int data;
  struct Node *left;
  struct Node *right;
  Node(int k){
      data = k;
      left = right = NULL;
  }
};
 
/* Function to calculate the minimum depth of the tree */
int minimumDepth(Node *root, int level)
{
           
        if (root == NULL)
            return level;
        level++;
   
        return min(minimumDepth(root->left, level),
                minimumDepth(root->right, level));
}
 
/* Driver program to test above functions */
int main()
{
   
    // Let us create binary tree shown in above diagram
    Node *root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->left->right = new Node(5);
   
    cout << minimumDepth(root, 0);
    return 0;
}
 
// This code is contributed by aafreen1804.

Java

/* Java implementation to find minimum depth
of a given Binary tree */
 
/* Class containing left and right child of current
Node and key value*/
class Node {
    int data;
    Node left, right;
 
    public Node(int item)
    {
        data = item;
        left = right = null;
    }
}
 
public class MinimumTreeHeight {
    // Root of the Binary Tree
    Node root;
 
    int minimumDepth() { return minimumDepth(root, 0); }
 
    /* Function to calculate the minimum depth of the tree
     */
    int minimumDepth(Node root, int level)
    {
 
        if (root == null)
            return level;
        level++;
 
        return Math.min(minimumDepth(root.left, level),
                        minimumDepth(root.right, level));
    }
 
    /* Driver program to test above functions */
    public static void main(String args[])
    {
        MinimumTreeHeight tree = new MinimumTreeHeight();
        tree.root = new Node(1);
        tree.root.left = new Node(2);
        tree.root.right = new Node(3);
        tree.root.left.left = new Node(4);
        tree.root.left.right = new Node(5);
 
        System.out.println("The minimum depth of "
                           + "binary tree is : "
                           + tree.minimumDepth());
    }
}

Python3

# Python implementation to find minimum depth
# of a given Binary tree
  
# Class containing left and right child of current
# Node and key value
class Node:
   
    # Constructor to create a new node
    def __init__(self, d):
        self.data = d
        self.left = None
        self.right = None
 
# Function to calculate the minimum depth of the tree
def minimumDepth(root, level):
    if (root == None):
        return level;
 
    level += 1;
     
    return min(minimumDepth(root.left, level),
                        minimumDepth(root.right, level))
 
# Driver program to test above functions
root = Node(1)
root.left = Node(2)
root.right = Node(3)
root.left.left = Node(4)
root.left.right = Node(5)
 
print("The minimum depth of ","binary tree is : ", minimumDepth(root, 0))
 
# This code is contributed by ab2127

C#

/* C# implementation to find minimum depth
of a given Binary tree */
using System;
 
/* Class containing left and
right child of current
Node and key value*/
public class Node {
    public int data;
    public Node left, right;
 
    public Node(int item)
    {
        data = item;
        left = right = null;
    }
}
 
public class MinimumTreeHeight {
    // Root of the Binary Tree
    Node root;
 
    int minimumDepth() { return minimumDepth(root, 0); }
 
    /* Function to calculate the
    minimum depth of the tree */
    int minimumDepth(Node root, int level)
    {
 
        if (root == null)
            return level;
        level++;
 
        return Math.Min(minimumDepth(root.left, level),
                        minimumDepth(root.right, level));
    }
 
    /* Driver code */
    public static void Main(String[] args)
    {
        MinimumTreeHeight tree = new MinimumTreeHeight();
        tree.root = new Node(1);
        tree.root.left = new Node(2);
        tree.root.right = new Node(3);
        tree.root.left.left = new Node(4);
        tree.root.left.right = new Node(5);
 
        Console.WriteLine("The minimum depth of "
                          + "binary tree is : "
                          + tree.minimumDepth());
    }
}
 
// This code has been contributed by 29AjayKumar

Javascript

<script>
/* Javascript implementation to find minimum depth
of a given Binary tree */
  
/* Class containing left and right child of current
Node and key value*/
 
class Node
{
    constructor(item)
    {
        this.data=item;
        this.left=this.right=null;
    }
}
// Root of the Binary Tree
let root;
 
/* Function to calculate the minimum depth of the tree
     */
function minimumDepths()
{
    return minimumDepth(root, 0);
}
 
function minimumDepth(root,level)
{
    if (root == null)
            return level;
        level++;
  
        return Math.min(minimumDepth(root.left, level),
                        minimumDepth(root.right, level));
}
 
 
    /* Driver program to test above functions */
root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.left.right = new Node(5);
 
document.write("The minimum depth of "
                   + "binary tree is : "
                   + minimumDepths());
 
 
// This code is contributed by avanitrachhadiya2155
</script>

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *