Dado un árbol binario, cuente las hojas en el árbol sin usar la recursividad. Un Node es un Node hoja si sus hijos izquierdo y derecho son NULL.
Example Tree
C++
// C++ program to count leaf nodes in a Binary Tree #include <bits/stdc++.h> using namespace std; /* A binary tree Node has data, pointer to left child and a pointer to right child */ struct Node { int data; struct Node* left, *right; }; /* Function to get the count of leaf Nodes in a binary tree*/ unsigned int getLeafCount(struct Node* node) { // If tree is empty if (!node) return 0; // Initialize empty queue. queue<Node *> q; // Do level order traversal starting from root int count = 0; // Initialize count of leaves q.push(node); while (!q.empty()) { struct Node *temp = q.front(); q.pop(); if (temp->left != NULL) q.push(temp->left); if (temp->right != NULL) q.push(temp->right); if (temp->left == NULL && temp->right == NULL) count++; } return count; } /* Helper function that allocates a new Node with the given data and NULL left and right pointers. */ struct Node* newNode(int data) { struct Node* node = new Node; node->data = data; node->left = node->right = NULL; return (node); } /* Driver program to test above functions*/ int main() { /* 1 / \ 2 3 / \ 4 5 Let us create Binary Tree shown in above example */ struct Node *root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); /* get leaf count of the above created tree */ cout << getLeafCount(root); return 0; }
Java
// Java program to count leaf nodes // in a Binary Tree import java.util.*; class GFG { /* A binary tree Node has data, pointer to left child and a pointer to right child */ static class Node { int data; Node left, right; } /* Function to get the count of leaf Nodes in a binary tree*/ static int getLeafCount(Node node) { // If tree is empty if (node == null) { return 0; } // Initialize empty queue. Queue<Node> q = new LinkedList<>(); // Do level order traversal starting from root int count = 0; // Initialize count of leaves q.add(node); while (!q.isEmpty()) { Node temp = q.peek(); q.poll(); if (temp.left != null) { q.add(temp.left); } if (temp.right != null) { q.add(temp.right); } if (temp.left == null && temp.right == null) { count++; } } return count; } /* Helper function that allocates a new Node with the given data and null left and right pointers. */ static Node newNode(int data) { Node node = new Node(); node.data = data; node.left = node.right = null; return (node); } // Driver Code public static void main(String[] args) { { /* 1 / \ 2 3 / \ 4 5 Let us create Binary Tree shown in above example */ Node root = newNode(1); root.left = newNode(2); root.right = newNode(3); root.left.left = newNode(4); root.left.right = newNode(5); /* get leaf count of the above created tree */ System.out.println(getLeafCount(root)); } } } // This code is contributed by Rajput-Ji
Python3
# Python3 program to count leaf nodes # in a Binary Tree from queue import Queue # Helper function that allocates a new # Node with the given data and None # left and right pointers. class newNode: def __init__(self, data): self.data = data self.left = self.right = None # Function to get the count of leaf # Nodes in a binary tree def getLeafCount(node): # If tree is empty if (not node): return 0 # Initialize empty queue. q = Queue() # Do level order traversal # starting from root count = 0 # Initialize count of leaves q.put(node) while (not q.empty()): temp = q.queue[0] q.get() if (temp.left != None): q.put(temp.left) if (temp.right != None): q.put(temp.right) if (temp.left == None and temp.right == None): count += 1 return count # Driver Code if __name__ == '__main__': # 1 # / \ # 2 3 # / \ # 4 5 # Let us create Binary Tree shown # in above example root = newNode(1) root.left = newNode(2) root.right = newNode(3) root.left.left = newNode(4) root.left.right = newNode(5) # get leaf count of the above # created tree print(getLeafCount(root)) # This code is contributed by PranchalK
C#
// C# program to count leaf nodes // in a Binary Tree using System; using System.Collections.Generic; class GFG { /* A binary tree Node has data, pointer to left child and a pointer to right child */ public class Node { public int data; public Node left, right; } /* Function to get the count of leaf Nodes in a binary tree*/ static int getLeafCount(Node node) { // If tree is empty if (node == null) { return 0; } // Initialize empty queue. Queue<Node> q = new Queue<Node>(); // Do level order traversal starting from root int count = 0; // Initialize count of leaves q.Enqueue(node); while (q.Count!=0) { Node temp = q.Peek(); q.Dequeue(); if (temp.left != null) { q.Enqueue(temp.left); } if (temp.right != null) { q.Enqueue(temp.right); } if (temp.left == null && temp.right == null) { count++; } } return count; } /* Helper function that allocates a new Node with the given data and null left and right pointers. */ static Node newNode(int data) { Node node = new Node(); node.data = data; node.left = node.right = null; return (node); } // Driver Code public static void Main(String[] args) { { /* 1 / \ 2 3 / \ 4 5 Let us create Binary Tree shown in above example */ Node root = newNode(1); root.left = newNode(2); root.right = newNode(3); root.left.left = newNode(4); root.left.right = newNode(5); /* get leaf count of the above created tree */ Console.WriteLine(getLeafCount(root)); } } } // This code is contributed by 29AjayKumar
Javascript
<script> // Javascript program to count leaf nodes // in a Binary Tree /* A binary tree Node has data, pointer to left child and a pointer to right child */ class Node { /* Helper function that allocates a new Node with the given data and null left and right pointers. */ constructor(data) { this.data=data; this.left=this.right=null; } } /* Function to get the count of leaf Nodes in a binary tree*/ function getLeafCount(node) { // If tree is empty if (node == null) { return 0; } // Initialize empty queue. let q = []; // Do level order traversal starting from root let count = 0; // Initialize count of leaves q.push(node); while (q.length!=0) { let temp = q.shift(); if (temp.left != null) { q.push(temp.left); } if (temp.right != null) { q.push(temp.right); } if (temp.left == null && temp.right == null) { count++; } } return count; } /* 1 / \ 2 3 / \ 4 5 Let us create Binary Tree shown in above example */ 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); /* get leaf count of the above created tree */ document.write(getLeafCount(root)); // This code is contributed by unknown2108 </script>
C++
// C++ Program for above approach #include <iostream> using namespace std; // Node class struct node { int data; struct node* left; struct node* right; }; // Program to count leaves int countLeaves(struct node *node) { // If the node itself is "null" // return 0, as there // are no leaves if(node == NULL) { return 0; } // It the node is a leaf then // both right and left // children will be "null" if(node->left == NULL && node->right == NULL) { return 1; } // Now we count the leaves in // the left and right // subtrees and return the sum return countLeaves(node->left) + countLeaves(node->right); } // Class newNode of Node type struct node* newNode(int data) { struct node* node = (struct node*)malloc(sizeof(struct node)); node->data = data; node->left = NULL; node->right = NULL; return(node); } // Driver Code int main() { struct node *root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->left->left = newNode(4); root->left->right = newNode(5); /* get leaf count of the above created tree */ cout<<countLeaves(root)<<endl; } // This code is contributed by rag2127
Java
// Java Program for above approach import java.util.LinkedList; import java.util.Queue; import java.io.*; import java.util.*; class GfG { // Node class static class Node { int data; Node left, right; } // Program to count leaves static int countLeaves(Node node) { // If the node itself is "null" // return 0, as there // are no leaves if (node == null) return 0; // It the node is a leaf then // both right and left // children will be "null" if (node.left == null && node.right == null) return 1; // Now we count the leaves in // the left and right // subtrees and return the sum return countLeaves(node.left) + countLeaves(node.right); } // Class newNode of Node type static Node newNode(int data) { Node node = new Node(); node.data = data; node.left = node.right = null; return (node); } // Driver Code public static void main(String[] args) { Node root = newNode(1); root.left = newNode(2); root.right = newNode(3); root.left.left = newNode(4); root.left.right = newNode(5); /* get leaf count of the above created tree */ System.out.println(countLeaves(root)); } } //Code by Rounik Prashar
Python3
# Python3 Program for above approach # Node class class Node: def __init__(self,x): self.data = x self.left = None self.right = None # Program to count leaves def countLeaves(node): # If the node itself is "None" # return 0, as there # are no leaves if (node == None): return 0 # It the node is a leaf then # both right and left # children will be "None" if (node.left == None and node.right == None): return 1 # Now we count the leaves in # the left and right # subtrees and return the sum return countLeaves(node.left) + countLeaves(node.right) # Driver Code if __name__ == '__main__': root = Node(1) root.left = Node(2) root.right = Node(3) root.left.left = Node(4) root.left.right = Node(5) # /* get leaf count of the above # created tree */ print(countLeaves(root)) # This code is contributed by mohit kumar 29
C#
// C# Program for above approach using System; // Node class public class Node { public int data; public Node left, right; public Node(int d) { data = d; left = right = null; } } public class BinaryTree{ public static Node root; // Program to count leaves static int countLeaves(Node node) { // If the node itself is "null" // return 0, as there // are no leaves if (node == null) { return 0; } // It the node is a leaf then // both right and left // children will be "null" if (node.left == null && node.right == null) { return 1; } // Now we count the leaves in // the left and right // subtrees and return the sum return countLeaves(node.left) + countLeaves(node.right); } // Driver Code static public void Main() { BinaryTree.root = new Node(1); BinaryTree.root.left = new Node(2); BinaryTree.root.right = new Node(3); BinaryTree.root.left.left = new Node(4); BinaryTree.root.left.right = new Node(5); // Get leaf count of the above created tree Console.WriteLine(countLeaves(root)); } } // This code is contributed by avanitrachhadiya2155
Javascript
<script> // Javascript Program for above approach // Node class class Node { // Class newNode of Node type constructor(data) { this.data=data; this.next = this.right = null; } } // Program to count leaves function countLeaves(node) { // If the node itself is "null" // return 0, as there // are no leaves if (node == null) return 0; // It the node is a leaf then // both right and left // children will be "null" if (node.left == null && node.right == null) return 1; // Now we count the leaves in // the left and right // subtrees and return the sum return countLeaves(node.left) + countLeaves(node.right); } // Driver Code 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); /* get leaf count of the above created tree */ document.write(countLeaves(root)); // This code is contributed by patel2127 </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