📌  相关文章
📜  二叉树每一层的最小值

📅  最后修改于: 2022-05-13 01:57:17.181000             🧑  作者: Mango

二叉树每一层的最小值

给定一棵包含 n 个节点的二叉树,任务是打印二叉树每一层的最小元素。
例子:

Input : 
            7
         /    \
        6       5
       / \     / \
      4  3     2  1  
       
Output : 
Every level minimum is
level 0 min is = 7
level 1 min is = 5
level 2 min is = 1

Input :  
            7
          /    \
        16       1
       / \      
      4   13    

Output :
Every level minimum is
level 0 min is = 7
level 1 min is = 1
level 2 min is = 4

方法一:使用中序遍历
方法:-这个想法是以有序的方式递归遍历树。根被认为是在第零级。首先,找到树的高度并将其存储到 res 中。 res 数组存储二叉树每一层中的每个最小元素。
下面是在二叉树的每一层上找到最小值的实现。

C++
// CPP program to print smallest element
// in each level of binary tree.
#include 
#define INT_MAX 10e6
using namespace std;
 
// A Binary Tree Node
struct Node {
    int data;
    struct Node *left, *right;
};
 
// return height of tree
int heightoftree(Node* root)
{
 
    if (root == NULL)
        return 0;
 
    int left = heightoftree(root->left);
    int right = heightoftree(root->right);
 
    return ((left > right ? left : right) + 1);
}
 
// Inorder Traversal
// Search minimum element in each level and
// store it into vector array.
void printPerLevelMinimum(Node* root,
                  vector& res, int level)
{
     
    if (root != NULL) {
 
        printPerLevelMinimum(root->left,
                              res, level + 1);
 
        if (root->data < res[level])
            res[level] = root->data;
 
        printPerLevelMinimum(root->right,
                              res, level + 1);
    }
}
 
void perLevelMinimumUtility(Node* root)
{
     
    // height of tree for the size of
    // vector array
    int n = heightoftree(root), i;
 
    // vector for store all minimum of
    // every level
    vector res(n, INT_MAX);
 
    // save every level minimum using
    // inorder traversal
    printPerLevelMinimum(root, res, 0);
 
    // print every level minimum
    cout << "Every level minimum is\n";
    for (i = 0; i < n; i++) {
        cout << "level " << i <<" min is = "
                            << res[i] << "\n";
    }
}
 
// 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(7);
    root->left = newNode(6);
    root->right = newNode(5);
    root->left->left = newNode(4);
    root->left->right = newNode(3);
    root->right->left = newNode(2);
    root->right->right = newNode(1);
 
    /*       7
         /  \
        6     5
       / \     / \
      4   3 2   1         */
    perLevelMinimumUtility(root);
 
    return 0;
}


Java
// Java program to print smallest element
// in each level of binary tree.
import java.util.Arrays;
class GFG
{
static int INT_MAX = (int) 10e6;
 
// A Binary Tree Node
static class Node
{
    int data;
    Node left, right;
};
 
// return height of tree
static int heightoftree(Node root)
{
    if (root == null)
        return 0;
 
    int left = heightoftree(root.left);
    int right = heightoftree(root.right);
 
    return ((left > right ? left : right) + 1);
}
 
// Inorder Traversal
// Search minimum element in each level and
// store it into vector array.
static void printPerLevelMinimum(Node root,
                      int []res, int level)
{
    if (root != null)
    {
        printPerLevelMinimum(root.left,
                             res, level + 1);
 
        if (root.data < res[level])
            res[level] = root.data;
 
        printPerLevelMinimum(root.right,
                             res, level + 1);
    }
}
 
static void perLevelMinimumUtility(Node root)
{
     
    // height of tree for the size of
    // vector array
    int n = heightoftree(root), i;
 
    // vector for store all minimum of
    // every level
    int []res = new int[n];
    Arrays.fill(res, INT_MAX);
 
    // save every level minimum using
    // inorder traversal
    printPerLevelMinimum(root, res, 0);
 
    // print every level minimum
    System.out.print("Every level minimum is\n");
    for (i = 0; i < n; i++)
    {
        System.out.print("level " + i +
                         " min is = " +
                        res[i] + "\n");
    }
}
 
// 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(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
 
    /*     7
        / \
        6     5
    / \     / \
    4 3 2 1         */
    perLevelMinimumUtility(root);
}
}
 
// This code is contributed by PrinciRaj1992


Python3
# Python3 program to print
# smallest element in each
# level of binary tree.
INT_MAX = 1000006
  
# A Binary Tree Node
class Node:
   
    def __init__(self,
                 data):
       
        self.data = data
        self.left = None
        self.right = None   
  
# return height of tree
def heightoftree(root):
  
    if (root == None):
        return 0;
  
    left = heightoftree(root.left);
    right = heightoftree(root.right);
     
    return ((left if left > right
                  else right) + 1);
 
  
# Inorder Traversal
# Search minimum element in
# each level and store it
# into vector array.
def printPerLevelMinimum(root,
                         res, level):
      
    if (root != None):
        res = printPerLevelMinimum(root.left,
                                   res, level + 1);
        if (root.data < res[level]):
            res[level] = root.data;
             
        res = printPerLevelMinimum(root.right,
                                   res, level + 1);
    return res
  
def perLevelMinimumUtility(root):
      
    # height of tree for the
    # size of vector array
    n = heightoftree(root)
    i = 0
  
    # vector for store all
    # minimum of every level
    res = [INT_MAX for i in range(n)]
  
    # save every level minimum
    # using inorder traversal
    res = printPerLevelMinimum(root,
                               res, 0);
  
    # print every level minimum
    print("Every level minimum is")
     
    for i in range(n):
        print('level ' + str(i) +
              ' min is = ' + str(res[i]))       
  
# Utility function to create
# a new tree node
def newNode(data):
 
    temp = Node(data)
    return temp;
 
# Driver code
if __name__ == "__main__":
     
    # Let us create binary
    # tree shown in below
    # diagram
    root = newNode(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
  
    '''    7
         /  \
        6     5
       / \     / \
      4   3 2   1         '''
       
    perLevelMinimumUtility(root);
  
# This code is contributed by Rutvik_56


C#
// C# program to print smallest element
// in each level of binary tree.
using System;
 
class GFG
{
static int INT_MAX = (int) 10e6;
 
// A Binary Tree Node
public class Node
{
    public int data;
    public Node left, right;
};
 
// return height of tree
static int heightoftree(Node root)
{
    if (root == null)
        return 0;
 
    int left = heightoftree(root.left);
    int right = heightoftree(root.right);
 
    return ((left > right ? left : right) + 1);
}
 
// Inorder Traversal
// Search minimum element in each level and
// store it into vector array.
static void printPerLevelMinimum(Node root,
                                 int []res,
                                 int level)
{
    if (root != null)
    {
        printPerLevelMinimum(root.left,
                             res, level + 1);
 
        if (root.data < res[level])
            res[level] = root.data;
 
        printPerLevelMinimum(root.right,
                             res, level + 1);
    }
}
 
static void perLevelMinimumUtility(Node root)
{
     
    // height of tree for the size of
    // vector array
    int n = heightoftree(root), i;
 
    // vector for store all minimum of
    // every level
    int []res = new int[n];
    for (i = 0; i < n; i++)
        res[i] = INT_MAX;
 
    // save every level minimum using
    // inorder traversal
    printPerLevelMinimum(root, res, 0);
 
    // print every level minimum
    Console.Write("Every level minimum is\n");
    for (i = 0; i < n; i++)
    {
        Console.Write("level " + i +
                      " min is = " +
                     res[i] + "\n");
    }
}
 
// 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(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
 
    /*     7
        / \
        6     5
    / \     / \
    4 3 2 1         */
    perLevelMinimumUtility(root);
}
}
 
// This code is contributed by Princi Singh


Javascript


C++
// CPP program to print minimum element
// in each level of binary tree.
#include 
#include 
#include 
#define INT_MAX 10e6
using namespace std;
 
// A Binary Tree Node
struct Node {
    int data;
    struct Node *left, *right;
};
 
// return height of tree
int heightoftree(Node* root)
{
 
    if (root == NULL)
        return 0;
 
    int left = heightoftree(root->left);
    int right = heightoftree(root->right);
 
    return ((left > right ? left : right) + 1);
}
 
// Iterative method to find every level
// minimum element of Binary Tree
void printPerLevelMinimum(Node* root)
{
 
    // Base Case
    if (root == NULL)
        return ;
 
    // Create an empty queue for
    // level order traversal
    queue q;
 
    // push the root for Change the level
    q.push(root);
 
    // for go level by level
    q.push(NULL);
 
    int min = INT_MAX;
    // for check the level
    int level = 0;
 
    while (q.empty() == false) {
 
        // Get top of queue
        Node* node = q.front();
        q.pop();
 
        // if node == NULL (Means this is
        // boundary between two levels)
        if (node == NULL) {
 
            cout << "level " << level <<
             " min is = " << min << "\n";
 
            // here queue is empty represent
            // no element in the actual
            // queue
            if (q.empty())
                break;
 
            q.push(NULL);
 
            // increment level
            level++;
 
            // Reset min for next level
            // minimum value
            min = INT_MAX;
 
            continue;
        }
 
        // get Minimum in every level
        if (min > node->data)
            min = node->data;
 
        /* Enqueue left child */
        if (node->left != NULL) {
            q.push(node->left);
        }
 
        /*Enqueue right child */
        if (node->right != NULL) {
            q.push(node->right);
        }
    }
}
 
// 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(7);
    root->left = newNode(6);
    root->right = newNode(5);
    root->left->left = newNode(4);
    root->left->right = newNode(3);
    root->right->left = newNode(2);
    root->right->right = newNode(1);
 
    /*      7
        /  \
       6    5
      / \  / \
     4  3 2   1         */
 
    cout << "Every Level minimum is"
        << "\n";
         
    printPerLevelMinimum(root);
     
    return 0;
}


Java
// JAVA program to print minimum element
// in each level of binary tree.
import java.util.*;
 
class GFG
{
 
// A Binary Tree Node
static class Node
{
    int data;
    Node left, right;
};
 
// return height of tree
static int heightoftree(Node root)
{
 
    if (root == null)
        return 0;
 
    int left = heightoftree(root.left);
    int right = heightoftree(root.right);
 
    return ((left > right ? left : right) + 1);
}
 
// Iterative method to find every level
// minimum element of Binary Tree
static void printPerLevelMinimum(Node root)
{
 
    // Base Case
    if (root == null)
        return ;
 
    // Create an empty queue for
    // level order traversal
    Queue q = new LinkedList();
 
    // push the root for Change the level
    q.add(root);
 
    // for go level by level
    q.add(null);
 
    int min = Integer.MAX_VALUE;
    // for check the level
    int level = 0;
 
    while (q.isEmpty() == false)
    {
 
        // Get top of queue
        Node node = q.peek();
        q.remove();
 
        // if node == null (Means this is
        // boundary between two levels)
        if (node == null)
        {
 
            System.out.print("level " + level +
            " min is = " + min+ "\n");
 
            // here queue is empty represent
            // no element in the actual
            // queue
            if (q.isEmpty())
                break;
 
            q.add(null);
 
            // increment level
            level++;
 
            // Reset min for next level
            // minimum value
            min = Integer.MAX_VALUE;
 
            continue;
        }
 
        // get Minimum in every level
        if (min > node.data)
            min = node.data;
 
        /* Enqueue left child */
        if (node.left != null)
        {
            q.add(node.left);
        }
 
        /*Enqueue right child */
        if (node.right != null)
        {
            q.add(node.right);
        }
    }
}
 
// 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(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
 
    /*     7
        / \
    6 5
    / \ / \
    4 3 2 1         */
 
    System.out.print("Every Level minimum is"
    + "\n");
         
    printPerLevelMinimum(root);
     
}
}
 
// This code is contributed by Rajput-Ji


Python3
# Python3 program to print minimum element
# in each level of binary tree.
 
# Importing Queue
from queue import Queue
 
# Utility class to create a
# new tree node
class newNode:
    def __init__(self, data):
        self.data = data
        self.left = self.right = None
     
# return height of tree p
def heightoftree(root):
 
    if (root == None):
        return 0
 
    left = heightoftree(root.left)
    right = heightoftree(root.right)
    if left > right:
        return left + 1
    else:
        return right + 1
         
# Iterative method to find every level
# minimum element of Binary Tree
def printPerLevelMinimum(root):
 
    # Base Case
    if (root == None):
        return
 
    # Create an empty queue for
    # level order traversal
    q = Queue()
 
    # put the root for Change the level
    q.put(root)
 
    # for go level by level
    q.put(None)
 
    Min = 9999999999999
     
    # for check the level
    level = 0
 
    while (q.empty() == False):
 
        # Get get of queue
        node = q.queue[0]
        q.get()
 
        # if node == None (Means this is
        # boundary between two levels)
        if (node == None):
 
            print("level", level, "min is =", Min)
 
            # here queue is empty represent
            # no element in the actual
            # queue
            if (q.empty()):
                break
 
            q.put(None)
 
            # increment level
            level += 1
 
            # Reset min for next level
            # minimum value
            Min = 999999999999
 
            continue
 
        # get Minimum in every level
        if (Min > node.data):
            Min = node.data
 
        # Enqueue left child
        if (node.left != None):
            q.put(node.left)
 
        #Enqueue right child
        if (node.right != None):
            q.put(node.right)
 
# Driver Code
if __name__ == '__main__':
     
    # Let us create binary tree shown
    # in above diagram
    root = newNode(7)
    root.left = newNode(6)
    root.right = newNode(5)
    root.left.left = newNode(4)
    root.left.right = newNode(3)
    root.right.left = newNode(2)
    root.right.right = newNode(1)
 
    #     7
    # / \
    # 6 5
    # / \ / \
    # 4 3 2 1        
    print("Every Level minimum is")
         
    printPerLevelMinimum(root)
 
# This code is contributed by PranchalK


C#
// C# program to print minimum element
// in each level of binary tree.
using System;
using System.Collections.Generic;
 
class GFG
{
 
// A Binary Tree Node
class Node
{
    public int data;
    public Node left, right;
};
 
// return height of tree
static int heightoftree(Node root)
{
 
    if (root == null)
        return 0;
 
    int left = heightoftree(root.left);
    int right = heightoftree(root.right);
 
    return ((left > right ? left : right) + 1);
}
 
// Iterative method to find every level
// minimum element of Binary Tree
static void printPerLevelMinimum(Node root)
{
 
    // Base Case
    if (root == null)
        return;
 
    // Create an empty queue for
    // level order traversal
    Queue q = new Queue();
 
    // push the root for Change the level
    q.Enqueue(root);
 
    // for go level by level
    q.Enqueue(null);
 
    int min = int.MaxValue;
    // for check the level
    int level = 0;
 
    while (q.Count != 0)
    {
 
        // Get top of queue
        Node node = q.Peek();
        q.Dequeue();
 
        // if node == null (Means this is
        // boundary between two levels)
        if (node == null)
        {
 
            Console.Write("level " + level +
                          " min is = " + min + "\n");
 
            // here queue is empty represent
            // no element in the actual
            // queue
            if (q.Count == 0)
                break;
 
            q.Enqueue(null);
 
            // increment level
            level++;
 
            // Reset min for next level
            // minimum value
            min = int.MaxValue;
 
            continue;
        }
 
        // get Minimum in every level
        if (min > node.data)
            min = node.data;
 
        /* Enqueue left child */
        if (node.left != null)
        {
            q.Enqueue(node.left);
        }
 
        /*Enqueue right child */
        if (node.right != null)
        {
            q.Enqueue(node.right);
        }
    }
}
 
// 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(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
 
    /* 7
        / \
    6 5
    / \ / \
    4 3 2 1     */
 
    Console.Write("Every Level minimum is" + "\n");
         
    printPerLevelMinimum(root);
}
}
 
// This code is contributed by PrinciRaj1992


Javascript


输出:

Every level minimum is
level 0 min is = 7
level 1 min is = 5
level 2 min is = 1

方法2:使用级别顺序遍历
方法:-这个想法是使用队列执行二叉树的迭代级顺序遍历。遍历时保持最小变量,该变量存储正在处理的树的当前级别的最小元素。完全遍历关卡后,打印该最小值。

C++

// CPP program to print minimum element
// in each level of binary tree.
#include 
#include 
#include 
#define INT_MAX 10e6
using namespace std;
 
// A Binary Tree Node
struct Node {
    int data;
    struct Node *left, *right;
};
 
// return height of tree
int heightoftree(Node* root)
{
 
    if (root == NULL)
        return 0;
 
    int left = heightoftree(root->left);
    int right = heightoftree(root->right);
 
    return ((left > right ? left : right) + 1);
}
 
// Iterative method to find every level
// minimum element of Binary Tree
void printPerLevelMinimum(Node* root)
{
 
    // Base Case
    if (root == NULL)
        return ;
 
    // Create an empty queue for
    // level order traversal
    queue q;
 
    // push the root for Change the level
    q.push(root);
 
    // for go level by level
    q.push(NULL);
 
    int min = INT_MAX;
    // for check the level
    int level = 0;
 
    while (q.empty() == false) {
 
        // Get top of queue
        Node* node = q.front();
        q.pop();
 
        // if node == NULL (Means this is
        // boundary between two levels)
        if (node == NULL) {
 
            cout << "level " << level <<
             " min is = " << min << "\n";
 
            // here queue is empty represent
            // no element in the actual
            // queue
            if (q.empty())
                break;
 
            q.push(NULL);
 
            // increment level
            level++;
 
            // Reset min for next level
            // minimum value
            min = INT_MAX;
 
            continue;
        }
 
        // get Minimum in every level
        if (min > node->data)
            min = node->data;
 
        /* Enqueue left child */
        if (node->left != NULL) {
            q.push(node->left);
        }
 
        /*Enqueue right child */
        if (node->right != NULL) {
            q.push(node->right);
        }
    }
}
 
// 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(7);
    root->left = newNode(6);
    root->right = newNode(5);
    root->left->left = newNode(4);
    root->left->right = newNode(3);
    root->right->left = newNode(2);
    root->right->right = newNode(1);
 
    /*      7
        /  \
       6    5
      / \  / \
     4  3 2   1         */
 
    cout << "Every Level minimum is"
        << "\n";
         
    printPerLevelMinimum(root);
     
    return 0;
}

Java

// JAVA program to print minimum element
// in each level of binary tree.
import java.util.*;
 
class GFG
{
 
// A Binary Tree Node
static class Node
{
    int data;
    Node left, right;
};
 
// return height of tree
static int heightoftree(Node root)
{
 
    if (root == null)
        return 0;
 
    int left = heightoftree(root.left);
    int right = heightoftree(root.right);
 
    return ((left > right ? left : right) + 1);
}
 
// Iterative method to find every level
// minimum element of Binary Tree
static void printPerLevelMinimum(Node root)
{
 
    // Base Case
    if (root == null)
        return ;
 
    // Create an empty queue for
    // level order traversal
    Queue q = new LinkedList();
 
    // push the root for Change the level
    q.add(root);
 
    // for go level by level
    q.add(null);
 
    int min = Integer.MAX_VALUE;
    // for check the level
    int level = 0;
 
    while (q.isEmpty() == false)
    {
 
        // Get top of queue
        Node node = q.peek();
        q.remove();
 
        // if node == null (Means this is
        // boundary between two levels)
        if (node == null)
        {
 
            System.out.print("level " + level +
            " min is = " + min+ "\n");
 
            // here queue is empty represent
            // no element in the actual
            // queue
            if (q.isEmpty())
                break;
 
            q.add(null);
 
            // increment level
            level++;
 
            // Reset min for next level
            // minimum value
            min = Integer.MAX_VALUE;
 
            continue;
        }
 
        // get Minimum in every level
        if (min > node.data)
            min = node.data;
 
        /* Enqueue left child */
        if (node.left != null)
        {
            q.add(node.left);
        }
 
        /*Enqueue right child */
        if (node.right != null)
        {
            q.add(node.right);
        }
    }
}
 
// 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(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
 
    /*     7
        / \
    6 5
    / \ / \
    4 3 2 1         */
 
    System.out.print("Every Level minimum is"
    + "\n");
         
    printPerLevelMinimum(root);
     
}
}
 
// This code is contributed by Rajput-Ji

Python3

# Python3 program to print minimum element
# in each level of binary tree.
 
# Importing Queue
from queue import Queue
 
# Utility class to create a
# new tree node
class newNode:
    def __init__(self, data):
        self.data = data
        self.left = self.right = None
     
# return height of tree p
def heightoftree(root):
 
    if (root == None):
        return 0
 
    left = heightoftree(root.left)
    right = heightoftree(root.right)
    if left > right:
        return left + 1
    else:
        return right + 1
         
# Iterative method to find every level
# minimum element of Binary Tree
def printPerLevelMinimum(root):
 
    # Base Case
    if (root == None):
        return
 
    # Create an empty queue for
    # level order traversal
    q = Queue()
 
    # put the root for Change the level
    q.put(root)
 
    # for go level by level
    q.put(None)
 
    Min = 9999999999999
     
    # for check the level
    level = 0
 
    while (q.empty() == False):
 
        # Get get of queue
        node = q.queue[0]
        q.get()
 
        # if node == None (Means this is
        # boundary between two levels)
        if (node == None):
 
            print("level", level, "min is =", Min)
 
            # here queue is empty represent
            # no element in the actual
            # queue
            if (q.empty()):
                break
 
            q.put(None)
 
            # increment level
            level += 1
 
            # Reset min for next level
            # minimum value
            Min = 999999999999
 
            continue
 
        # get Minimum in every level
        if (Min > node.data):
            Min = node.data
 
        # Enqueue left child
        if (node.left != None):
            q.put(node.left)
 
        #Enqueue right child
        if (node.right != None):
            q.put(node.right)
 
# Driver Code
if __name__ == '__main__':
     
    # Let us create binary tree shown
    # in above diagram
    root = newNode(7)
    root.left = newNode(6)
    root.right = newNode(5)
    root.left.left = newNode(4)
    root.left.right = newNode(3)
    root.right.left = newNode(2)
    root.right.right = newNode(1)
 
    #     7
    # / \
    # 6 5
    # / \ / \
    # 4 3 2 1        
    print("Every Level minimum is")
         
    printPerLevelMinimum(root)
 
# This code is contributed by PranchalK

C#

// C# program to print minimum element
// in each level of binary tree.
using System;
using System.Collections.Generic;
 
class GFG
{
 
// A Binary Tree Node
class Node
{
    public int data;
    public Node left, right;
};
 
// return height of tree
static int heightoftree(Node root)
{
 
    if (root == null)
        return 0;
 
    int left = heightoftree(root.left);
    int right = heightoftree(root.right);
 
    return ((left > right ? left : right) + 1);
}
 
// Iterative method to find every level
// minimum element of Binary Tree
static void printPerLevelMinimum(Node root)
{
 
    // Base Case
    if (root == null)
        return;
 
    // Create an empty queue for
    // level order traversal
    Queue q = new Queue();
 
    // push the root for Change the level
    q.Enqueue(root);
 
    // for go level by level
    q.Enqueue(null);
 
    int min = int.MaxValue;
    // for check the level
    int level = 0;
 
    while (q.Count != 0)
    {
 
        // Get top of queue
        Node node = q.Peek();
        q.Dequeue();
 
        // if node == null (Means this is
        // boundary between two levels)
        if (node == null)
        {
 
            Console.Write("level " + level +
                          " min is = " + min + "\n");
 
            // here queue is empty represent
            // no element in the actual
            // queue
            if (q.Count == 0)
                break;
 
            q.Enqueue(null);
 
            // increment level
            level++;
 
            // Reset min for next level
            // minimum value
            min = int.MaxValue;
 
            continue;
        }
 
        // get Minimum in every level
        if (min > node.data)
            min = node.data;
 
        /* Enqueue left child */
        if (node.left != null)
        {
            q.Enqueue(node.left);
        }
 
        /*Enqueue right child */
        if (node.right != null)
        {
            q.Enqueue(node.right);
        }
    }
}
 
// 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(7);
    root.left = newNode(6);
    root.right = newNode(5);
    root.left.left = newNode(4);
    root.left.right = newNode(3);
    root.right.left = newNode(2);
    root.right.right = newNode(1);
 
    /* 7
        / \
    6 5
    / \ / \
    4 3 2 1     */
 
    Console.Write("Every Level minimum is" + "\n");
         
    printPerLevelMinimum(root);
}
}
 
// This code is contributed by PrinciRaj1992

Javascript


输出:

Every level minimum is
level 0 min is = 7
level 1 min is = 5
level 2 min is = 1