Подсчитайте узлы с двумя дочерними элементами на уровне L в двоичном дереве
Учитывая двоичное дерево, задача состоит в том, чтобы подсчитать количество узлов с двумя дочерними элементами на заданном уровне L.
Примеры:
Вход:
1
/
2 3
/
4 5 6
/ /
7 8 9
L = 2
Выход: 1
Вход:
20
/
8 22
/ /
5 3 4 25
/ /
1 10 2 14 6
L = 3
Выход: 2
Подход: инициализировать переменную count = 0 . Рекурсивно перемещаться по дереву в порядке уровней. Если текущий уровень совпадает с заданным, проверьте, есть ли у текущего узла два дочерних элемента. Если у него два дочерних элемента, увеличьте счетчик переменных.
Below is the implementation of the above approach:
C++
// C++ program to find number of full nodes// at a given level#include <bits/stdc++.h>using namespace std;// A binary tree nodestruct Node { int data; struct Node *left, *right;};// Utility function to allocate memory for a new nodestruct Node* newNode(int data){ struct Node* node = new (struct Node); node->data = data; node->left = node->right = NULL; return (node);}// Function that returns the height of binary treeint height(struct Node* root){ if (root == NULL) return 0; int lheight = height(root->left); int rheight = height(root->right); return max(lheight, rheight) + 1;}// Level Order traversal to find the number of nodes// having two childrenvoid LevelOrder(struct Node* root, int level, int& count){ if (root == NULL) return; if (level == 1 && root->left && root->right) count++; else if (level > 1) { LevelOrder(root->left, level - 1, count); LevelOrder(root->right, level - 1, count); }}// Returns the number of full nodes// at a given levelint CountFullNodes(struct Node* root, int L){ // Stores height of tree int h = height(root); // Stores count of nodes at a given level // that have two children int count = 0; LevelOrder(root, L, count); return count;}// Driver codeint main(){ struct Node* root = newNode(7); root->left = newNode(5); root->right = newNode(6); root->left->left = newNode(8); root->left->right = newNode(1); root->left->left->left = newNode(2); root->left->left->right = newNode(11); root->right->left = newNode(3); root->right->right = newNode(9); root->right->right->right = newNode(13); root->right->right->left = newNode(10); root->right->right->right->left = newNode(4); root->right->right->right->right = newNode(12); int L = 3; cout << CountFullNodes(root, L); return 0;} |
Java
// Java program to find number of full nodes// at a given levelclass GFG{//INT classstatic class INT{ int a;}// A binary tree nodestatic class Node{ int data; Node left, right;};// Utility function to allocate memory for a new nodestatic Node newNode(int data){ Node node = new Node(); node.data = data; node.left = node.right = null; return (node);}// Function that returns the height of binary treestatic int height(Node root){ if (root == null) return 0; int lheight = height(root.left); int rheight = height(root.right); return Math.max(lheight, rheight) + 1;}// Level Order traversal to find the number of nodes// having two childrenstatic void LevelOrder( Node root, int level, INT count){ if (root == null) return; if (level == 1 && root.left!=null && root.right!=null) count.a++; else if (level > 1) { LevelOrder(root.left, level - 1, count); LevelOrder(root.right, level - 1, count); }}// Returns the number of full nodes// at a given levelstatic int CountFullNodes( Node root, int L){ // Stores height of tree int h = height(root); // Stores count of nodes at a given level // that have two children INT count =new INT(); count.a = 0; LevelOrder(root, L, count); return count.a;}// Driver codepublic static void main(String args[]){ Node root = newNode(7); root.left = newNode(5); root.right = newNode(6); root.left.left = newNode(8); root.left.right = newNode(1); root.left.left.left = newNode(2); root.left.left.right = newNode(11); root.right.left = newNode(3); root.right.right = newNode(9); root.right.right.right = newNode(13); root.right.right.left = newNode(10); root.right.right.right.left = newNode(4); root.right.right.right.right = newNode(12); int L = 3; System.out.print( CountFullNodes(root, L));}}// This code is contributed by Arnab Kundu |
Python3
# Python3 program to find number of# full nodes at a given level# INT classclass INT: def __init__(self): self.a = 0# A binary tree nodeclass Node: def __init__(self, data): self.left = None self.right = None self.data = data # Utility function to allocate# memory for a new nodedef newNode(data): node = Node(data) return node# Function that returns the# height of binary treedef height(root): if (root == None): return 0; lheight = height(root.left); rheight = height(root.right); return max(lheight, rheight) + 1;# Level Order traversal to find the# number of nodes having two childrendef LevelOrder(root, level, count): if (root == None): return; if (level == 1 and root.left != None and root.right != None): count.a += 1 elif (level > 1): LevelOrder(root.left, level - 1, count); LevelOrder(root.right, level - 1, count); # Returns the number of full nodes# at a given leveldef CountFullNodes(root, L): # Stores height of tree h = height(root); # Stores count of nodes at a # given level that have two children count = INT() LevelOrder(root, L, count); return count.a# Driver code if __name__=="__main__": root = newNode(7); root.left = newNode(5); root.right = newNode(6); root.left.left = newNode(8); root.left.right = newNode(1); root.left.left.left = newNode(2); root.left.left.right = newNode(11); root.right.left = newNode(3); root.right.right = newNode(9); root.right.right.right = newNode(13); root.right.right.left = newNode(10); root.right.right.right.left = newNode(4); root.right.right.right.right = newNode(12); L = 3; print(CountFullNodes(root, L)) # This code is contributed by rutvik_56 |
C#
// C# program to find number of full nodes// at a given levelusing System;class GFG{// INT classpublic class INT{ public int a;}// A binary tree nodepublic class Node{ public int data; public Node left, right;};// Utility function to allocate memory for a new nodestatic Node newNode(int data){ Node node = new Node(); node.data = data; node.left = node.right = null; return (node);}// Function that returns the height of binary treestatic int height(Node root){ if (root == null) return 0; int lheight = height(root.left); int rheight = height(root.right); return Math.Max(lheight, rheight) + 1;}// Level Order traversal to find the number of nodes// having two childrenstatic void LevelOrder( Node root, int level, INT count){ if (root == null) return; if (level == 1 && root.left!=null && root.right!=null) count.a++; else if (level > 1) { LevelOrder(root.left, level - 1, count); LevelOrder(root.right, level - 1, count); }}// Returns the number of full nodes// at a given levelstatic int CountFullNodes( Node root, int L){ // Stores height of tree int h = height(root); // Stores count of nodes at a given level // that have two children INT count =new INT(); count.a = 0; LevelOrder(root, L, count); return count.a;}// Driver codepublic static void Main(String []args){ Node root = newNode(7); root.left = newNode(5); root.right = newNode(6); root.left.left = newNode(8); root.left.right = newNode(1); root.left.left.left = newNode(2); root.left.left.right = newNode(11); root.right.left = newNode(3); root.right.right = newNode(9); root.right.right.right = newNode(13); root.right.right.left = newNode(10); root.right.right.right.left = newNode(4); root.right.right.right.right = newNode(12); int L = 3; Console.Write( CountFullNodes(root, L));}}// This code has been contributed by 29AjayKumar |
2
Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .
Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.