Nivå Order Traversal teknik definieras som en metod för att korsa ett träd så att alla noder som finns på samma nivå korsas helt innan nästa nivå.
Exempel:
Rekommenderad övning Nivåbeställningsövergång Prova det!Inmatning:
Produktion:
1
23
Fyra fem
Hur fungerar Level Order Traversal?
Huvudidén med genomgång av nivåordning är att korsa alla noder på en lägre nivå innan du flyttar till någon av noderna på en högre nivå. Detta kan göras på något av följande sätt:
- den naiva (att hitta höjden på trädet och korsa varje nivå och skriva ut noderna för den nivån)
- effektivt använda en kö.
Level Order Traversal (naivt tillvägagångssätt):
Hitta höjd av träd. Kör sedan en rekursiv funktion för varje nivå genom att behålla nuvarande höjd. Närhelst nivån på en nod matchar, skriv ut den noden.
Nedan är implementeringen av ovanstående tillvägagångssätt:
C++ // Recursive CPP program for level // order traversal of Binary Tree #include using namespace std; // A binary tree node has data, // pointer to left child // and a pointer to right child class node { public: int data; node *left, *right; }; // Function prototypes void printCurrentLevel(node* root, int level); int height(node* node); node* newNode(int data); // Function to print level order traversal a tree void printLevelOrder(node* root) { int h = height(root); int i; for (i = 1; i <= h; i++) printCurrentLevel(root, i); } // Print nodes at a current level void printCurrentLevel(node* root, int level) { if (root == NULL) return; if (level == 1) cout << root->data<< ' '; else if (level>1) { printCurrentLevel(root->vänster, nivå - 1); printCurrentLevel(root->right, level - 1); } } // Beräkna 'höjden' på ett träd -- antalet // noder längs den längsta vägen från rotnoden // ner till den längsta lövnoden. int height(nod* nod) { if (nod == NULL) return 0; else { // Beräkna höjden på varje delträd int lheight = height(nod->vänster); int höger = höjd(nod->höger); // Använd den större if (lheight> rheight) { return (lheight + 1); } else { return (höger + 1); } } } // Hjälpfunktion som allokerar // en ny nod med givna data och // NULL vänster- och högerpekare. node* newNode(int data) { node* Node = new node(); Nod->data = data; Node->vänster = NULL; Node->höger = NULL; return (Nod); } // Drivrutinskod int main() { node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->vänster->vänster = newNode(4); root->vänster->höger = newNode(5); cout<< 'Level Order traversal of binary tree is
'; printLevelOrder(root); return 0; } // This code is contributed by rathbhupendra>
C // Recursive C program for level // order traversal of Binary Tree #include #include // 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 prototypes void printCurrentLevel(struct node* root, int level); int height(struct node* node); struct node* newNode(int data); // Function to print level order traversal a tree void printLevelOrder(struct node* root) { int h = height(root); int i; for (i = 1; i <= h; i++) printCurrentLevel(root, i); } // Print nodes at a current level void printCurrentLevel(struct node* root, int level) { if (root == NULL) return; if (level == 1) printf('%d ', root->data); else if (nivå> 1) { printCurrentLevel(root->vänster, nivå - 1); printCurrentLevel(root->right, level - 1); } } // Beräkna 'höjden' för ett träd -- antalet // noder längs den längsta vägen från rotnoden // ner till lövnoden längst bort int height(struct node* node) { if (nod) == NULL) returnera 0; else { // Beräkna höjden på varje delträd int lheight = height(nod->vänster); int höger = höjd(nod->höger); // Använd den större om (lheight> rheight) return (lheight + 1); annars retur (höger + 1); } } // Hjälpfunktion som allokerar en ny nod med // givna data och NULL vänster och höger pekare. struct node* newNode(int data) { struct node* node = (struct node*)malloc(sizeof(struct node)); nod->data = data; nod->vänster = NULL; node->höger = NULL; retur (nod); } // Drivrutinsprogram för att testa ovanstående funktioner int main() { struct node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->vänster->vänster = newNode(4); root->vänster->höger = newNode(5); printf('Nivåordningsgenomgång av binärt träd är
'); printLevelOrder(root); returnera 0; }>
Java // Recursive Java program for level // order traversal of 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; } } class BinaryTree { // Root of the Binary Tree Node root; public BinaryTree() { root = null; } // Function to print level order traversal of tree void printLevelOrder() { int h = height(root); int i; for (i = 1; i <= h; i++) printCurrentLevel(root, i); } // Compute the 'height' of a tree -- the number of // nodes along the longest path from the root node // down to the farthest leaf node. int height(Node root) { if (root == null) return 0; else { // Compute height of each subtree int lheight = height(root.left); int rheight = height(root.right); // use the larger one if (lheight>rheight) return (lheight + 1); annars retur (höger + 1); } } // Skriv ut noder på nuvarande nivå void printCurrentLevel(Nodrot, int nivå) { if (root == null) return; if (nivå == 1) System.out.print(root.data + ' '); else if (nivå> 1) { printCurrentLevel(root.left, level - 1); printCurrentLevel(root.right, nivå - 1); } } // Drivrutinsprogram för att testa ovanstående funktioner public static void main(String args[]) { BinaryTree tree = new BinaryTree(); tree.root = ny Node(1); tree.root.left = ny Node(2); tree.root.right = ny Node(3); tree.root.left.left = ny Node(4); tree.root.left.right = ny Node(5); System.out.println('Nivåordningsgenomgång av' + 'binärt träd är '); tree.printLevelOrder(); } }>
Pytonorm # Recursive Python program for level # order traversal of Binary Tree # A node structure class Node: # A utility function to create a new node def __init__(self, key): self.data = key self.left = None self.right = None # Function to print level order traversal of tree def printLevelOrder(root): h = height(root) for i in range(1, h+1): printCurrentLevel(root, i) # Print nodes at a current level def printCurrentLevel(root, level): if root is None: return if level == 1: print(root.data, end=' ') elif level>1: printCurrentLevel(root.left, level-1) printCurrentLevel(root.right, level-1) # Beräkna höjden på ett träd--antal noder # längs den längsta vägen från rotnoden ner till # det längsta bladet nod def höjd(nod): om nod är Ingen: returnera 0 annat: # Beräkna höjden för varje delträd lheight = height(node.left) rheight = height(nod.right) # Använd den större om lheight> rheight: returnera lheight+1 else: return rheight+1 # Drivrutinsprogram för att testa ovanstående funktion om __name__ == '__main__': root = Nod(1) root.left = Node(2) root.right = Nod(3) rot. left.left = Nod(4) root.left.right = Nod(5) print('Nivåordningsgenomgång av binärt träd är -') printLevelOrder(root) # Denna kod har bidragit från Nikhil Kumar Singh(nickzuck_007)>
C# // Recursive c# program for level // order traversal of 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; } } class GFG { // Root of the Binary Tree public Node root; public void BinaryTree() { root = null; } // Function to print level order // traversal of tree public virtual void printLevelOrder() { int h = height(root); int i; for (i = 1; i <= h; i++) { printCurrentLevel(root, i); } } // Compute the 'height' of a tree -- // the number of nodes along the longest // path from the root node down to the // farthest leaf node. public virtual int height(Node root) { if (root == null) { return 0; } else { // Compute height of each subtree int lheight = height(root.left); int rheight = height(root.right); // use the larger one if (lheight>rheight) { return (lheight + 1); } else { return (höger + 1); } } } // Skriv ut noder på nuvarande nivå public virtual void printCurrentLevel(Nodrot, int nivå) { if (root == null) { return; } if (nivå == 1) { Console.Write(root.data + ' '); } else if (nivå> 1) { printCurrentLevel(root.left, level - 1); printCurrentLevel(root.right, nivå - 1); } } // Driver Code public static void Main(string[] args) { GFG tree = new GFG(); tree.root = ny Node(1); tree.root.left = ny Node(2); tree.root.right = ny Node(3); tree.root.left.left = ny Node(4); tree.root.left.right = ny Node(5); Console.WriteLine('Nivåordningsövergång ' + 'av binärt träd är '); tree.printLevelOrder(); } } // Denna kod är bidragit från Shrikant13>
Javascript // Recursive javascript program for level // order traversal of Binary Tree // Class containing left and right child of current // node and key value class Node { constructor(val) { this.data = val; this.left = null; this.right = null; } } // Root of the Binary Tree var root= null; // Function to print level order traversal of tree function printLevelOrder() { var h = height(root); var i; for (i = 1; i <= h; i++) printCurrentLevel(root, i); } // Compute the 'height' of a tree -- the number // of nodes along the longest path // from the root node down to the farthest leaf node. function height(root) { if (root == null) return 0; else { // Compute height of each subtree var lheight = height(root.left); var rheight = height(root.right); // Use the larger one if (lheight>rheight) return (lheight + 1); annars retur (höger + 1); } } // Skriv ut noder på aktuell nivå funktion printCurrentLevel(root , level) { if (root == null) return; if (nivå == 1) console.log(root.data + ' '); else if (nivå> 1) { printCurrentLevel(root.left, level - 1); printCurrentLevel(root.right, nivå - 1); } } // Drivrutinsprogram för att testa ovanstående funktioner root = new Node(1); root.left = ny Node(2); root.right = ny Node(3); root.left.left = ny Node(4); root.left.right = ny Node(5); console.log('Nivåordningsgenomgång av binärt träd är '); printLevelOrder(); // Denna kod är bidragit av umadevi9616>
Produktion
Level Order traversal of binary tree is 1 2 3 4 5>
Tidskomplexitet: O(N), där N är antalet noder i det sneda trädet.
Hjälputrymme: O(1) Om rekursionsstacken anses vara det utrymme som används är O(N).
aktuellt datum i java
Level Order Traversal med hjälp av Kö
Vi måste besöka noderna på en lägre nivå före någon nod på en högre nivå, denna idé är ganska lik den för en kö. Tryck på noderna på en lägre nivå i kön. När någon nod besöks, släpp den noden från kön och tryck på barnet till den noden i kön.
Detta säkerställer att noden på en lägre nivå besöks före någon nod på en högre nivå.
Nedan är implementeringen av ovanstående tillvägagångssätt:
C++ // C++ program to print level order traversal #include using namespace std; // A Binary Tree Node struct Node { int data; struct Node *left, *right; }; // Iterative method to find height of Binary Tree void printLevelOrder(Node* root) { // Base Case if (root == NULL) return; // Create an empty queue for level order traversal queueq; // Enqueue Root och initiera höjd q.push(root); while (q.empty() == false) { // Skriv ut framför kön och ta bort den från kön Node* node = q.front(); cout<< node->data<< ' '; q.pop(); // Enqueue left child if (node->vänster != NULL) q.push(nod->vänster); // Enqueue right child if (nod->höger != NULL) q.push(nod->höger); } } // Verktygsfunktion för att skapa en ny trädnod Node* newNode(int data) { Node* temp = new Node; temp->data = data; temp->vänster = temp->höger = NULL; returtemp; } // Drivrutinsprogram för att testa ovanstående funktioner int main() { // Låt oss skapa binärt träd som visas i ovanstående diagram Node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->vänster->vänster = newNode(4); root->vänster->höger = newNode(5); cout<< 'Level Order traversal of binary tree is
'; printLevelOrder(root); return 0; }>
C // Iterative Queue based C program // to do level order traversal // of Binary Tree #include #include #define MAX_Q_SIZE 500 // A binary tree node has data, // pointer to left child // and a pointer to right child struct node { int data; struct node* left; struct node* right; }; // Function prototypes struct node** createQueue(int*, int*); void enQueue(struct node**, int*, struct node*); struct node* deQueue(struct node**, int*); // Given a binary tree, print its nodes in level order // using array for implementing queue void printLevelOrder(struct node* root) { int rear, front; struct node** queue = createQueue(&front, &rear); struct node* temp_node = root; while (temp_node) { printf('%d ', temp_node->data); // Enqueue left child if (temp_node->left) enQueue(queue, &rear, temp_node->left); // Enqueue right child if (temp_node->right) enQueue(queue, &rear, temp_node->right); // Ta bort noden och gör den till temp_node temp_node = deQueue(queue, &front); } } // Verktygsfunktioner struct node** createQueue(int* front, int* rear) { struct node** queue = (struct node**)malloc( sizeof(struct node*) * MAX_Q_SIZE); *fram = *bak = 0; returkö; } void enQueue(struct node** queue, int* rear, struct node* new_node) { queue[*rear] = new_node; (*bak)++; } struct node* deQueue(struct node** kö, int* front) { (*front)++; returkö[*front - 1]; } // Hjälpfunktion som allokerar en ny nod med // givna data och NULL vänster och höger pekare. struct node* newNode(int data) { struct node* node = (struct node*)malloc(sizeof(struct node)); nod->data = data; nod->vänster = NULL; node->höger = NULL; retur (nod); } // Drivrutinsprogram för att testa ovanstående funktioner int main() { struct node* root = newNode(1); root->left = newNode(2); root->right = newNode(3); root->vänster->vänster = newNode(4); root->vänster->höger = newNode(5); printf('Nivåordningsgenomgång av binärt träd är
'); printLevelOrder(root); returnera 0; }>
Java // Iterative Queue based Java program // to do level order traversal // of Binary Tree import java.util.LinkedList; import java.util.Queue; // Class to represent Tree node class Node { int data; Node left, right; public Node(int item) { data = item; left = null; right = null; } } // Class to print Level Order Traversal class BinaryTree { Node root; // Given a binary tree. Print // its nodes in level order // using array for implementing queue void printLevelOrder() { Queuekö = ny länkad lista(); queue.add(root); medan (!queue.isEmpty()) { // poll() tar bort det aktuella huvudet. Nod tempNode = queue.poll(); System.out.print(tempNode.data + ' '); // Enqueue left child if (tempNode.left != null) { queue.add(tempNode.left); } // Enqueue right child if (tempNode.right != null) { queue.add(tempNode.right); } } } public static void main(String args[]) { // Skapar ett binärt träd och anger // noderna BinaryTree tree_level = new BinaryTree(); tree_level.root = ny Node(1); tree_level.root.left = ny Node(2); tree_level.root.right = ny Node(3); tree_level.root.left.left = ny Node(4); tree_level.root.left.right = ny Node(5); System.out.println('Nivåordningsgenomgång av binärt träd är - '); tree_level.printLevelOrder(); } }>
Pytonorm # Python program to print level # order traversal using Queue # A node structure class Node: # A utility function to create a new node def __init__(self, key): self.data = key self.left = None self.right = None # Iterative Method to print the # height of a binary tree def printLevelOrder(root): # Base Case if root is None: return # Create an empty queue # for level order traversal queue = [] # Enqueue Root and initialize height queue.append(root) while(len(queue)>0): # Skriv ut framför kön och # ta bort den från kön print(queue[0].data, end=' ') node = queue.pop(0) # Kön vänster underordnad om node.left inte är Ingen: queue.append(node.left) # Kö höger barn om node.right inte är Ingen: queue.append(node.right) # Drivrutin Program för att testa ovanstående funktion om __name__ == '__main__': root = Node(1) ) root.left = Nod(2) root.right = Nod(3) root.left.left = Nod(4) root.left.right = Nod(5) print('Nivåordningsgenomgång av binärt träd är - ') printLevelOrder(root) # Denna kod har bidragit från Nikhil Kumar Singh(nickzuck_007)>
C# // Iterative Queue based C# program // to do level order traversal // of Binary Tree using System; using System.Collections.Generic; // Class to represent Tree node public class Node { public int data; public Node left, right; public Node(int item) { data = item; left = null; right = null; } } // Class to print Level Order Traversal public class BinaryTree { Node root; // Given a binary tree. Print // its nodes in level order using // array for implementing queue void printLevelOrder() { Queuekö = ny kö(); queue.Enqueue(root); while (queue.Count != 0) { Node tempNode = queue.Dequeue(); Console.Write(tempNode.data + ' '); // Enqueue left child if (tempNode.left != null) { queue.Enqueue(tempNode.left); } // Enqueue right child if (tempNode.right != null) { queue.Enqueue(tempNode.right); } } } // Driver code public static void Main() { // Skapar ett binärt träd och anger // noderna BinaryTree tree_level = new BinaryTree(); tree_level.root = ny Node(1); tree_level.root.left = ny Node(2); tree_level.root.right = ny Node(3); tree_level.root.left.left = ny Node(4); tree_level.root.left.right = ny Node(5); Console.WriteLine('Nivåordningsövergång ' + 'av binärt träd är - '); tree_level.printLevelOrder(); } } // Denna kod bidragit från PrinciRaj1992>
Javascript class Node { constructor(val) { this.data = val; this.left = null; this.right = null; } } // Class to represent a deque (double-ended queue) class Deque { constructor() { this.queue = []; } // Method to add an element to the end of the queue enqueue(item) { this.queue.push(item); } // Method to remove and return the first element of the queue dequeue() { return this.queue.shift(); } // Method to check if the queue is empty isEmpty() { return this.queue.length === 0; } } // Function to perform level order traversal of a binary tree function printLevelOrder(root) { // Create a deque to store nodes for traversal const queue = new Deque(); // Add the root node to the queue queue.enqueue(root); // Continue traversal until the queue is empty while (!queue.isEmpty()) { // Remove and get the first node from the queue const tempNode = queue.dequeue(); // Print the data of the current node console.log(tempNode.data + ' '); // Enqueue the left child if it exists if (tempNode.left !== null) { queue.enqueue(tempNode.left); } // Enqueue the right child if it exists if (tempNode.right !== null) { queue.enqueue(tempNode.right); } } } // Create a binary tree and enter the nodes const 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); // Print the level order traversal of the binary tree console.log('Level order traversal of binary tree is - '); printLevelOrder(root);>
Produktion
Level Order traversal of binary tree is 1 2 3 4 5>
Tidskomplexitet: O(N) där N är antalet noder i det binära trädet.
Hjälputrymme: O(N) där N är antalet noder i det binära trädet.