给定一棵二叉树和一个键,编写一个函数来打印给定二叉树中所有键的级别。 例如,考虑下面的树。如果输入键是3,那么函数应该返回1。如果输入键是4,那么函数应该返回3。对于key中不存在的key,函数应该返回0。
null
Input: 3 / 2 5 / 1 4output: Level of 1 is 3 Level of 2 is 2 Level of 3 is 1 Level of 4 is 3 Level of 5 is 2
我们在下面的帖子中讨论了递归解决方案。 获取二叉树中节点的级别 在本文中,基于 水平顺序遍历 本文对此进行了讨论。在进行遍历时,我们将队列中每个节点的级别与节点一起存储。
C++
// An iterative C++ program to print levels // of all nodes #include <bits/stdc++.h> using namespace std; /* A tree node structure */ struct Node { int data; struct Node* left; struct Node* right; }; void printLevel( struct Node* root) { if (!root) return ; // queue to hold tree node with level queue<pair< struct Node*, int > > q; q.push({root, 1}); // let root node be at level 1 pair< struct Node*, int > p; // Do level Order Traversal of tree while (!q.empty()) { p = q.front(); q.pop(); cout << "Level of " << p.first->data << " is " << p.second << "" ; if (p.first->left) q.push({ p.first->left, p.second + 1 }); if (p.first->right) q.push({ p.first->right, p.second + 1 }); } } /* Utility function to create a new Binary Tree node */ struct Node* newNode( int data) { struct Node* temp = new struct Node; temp->data = data; temp->left = temp->right = NULL; return temp; } /* Driver function to test above functions */ int main() { struct Node* root = NULL; /* Constructing tree given in the above figure */ root = newNode(3); root->left = newNode(2); root->right = newNode(5); root->left->left = newNode(1); root->left->right = newNode(4); printLevel(root); return 0; } |
JAVA
// Java program to print // levels of all nodes import java.util.LinkedList; import java.util.Queue; public class Print_Level_Btree { /* A tree node structure */ static class Node { int data; Node left; Node right; Node( int data){ this .data = data; left = null ; right = null ; } } // User defined class Pair to hold // the node and its level static class Pair{ Node n; int i; Pair(Node n, int i){ this .n = n; this .i = i; } } // function to print the nodes and // its corresponding level static void printLevel(Node root) { if (root == null ) return ; // queue to hold tree node with level Queue<Pair> q = new LinkedList<Pair>(); // let root node be at level 1 q.add( new Pair(root, 1 )); Pair p; // Do level Order Traversal of tree while (!q.isEmpty()) { p = q.peek(); q.remove(); System.out.println( "Level of " + p.n.data + " is " + p.i); if (p.n.left != null ) q.add( new Pair(p.n.left, p.i + 1 )); if (p.n.right != null ) q.add( new Pair(p.n.right, p.i + 1 )); } } /* Driver function to test above functions */ public static void main(String args[]) { Node root = null ; /* Constructing tree given in the above figure */ root = new Node( 3 ); root.left = new Node( 2 ); root.right = new Node( 5 ); root.left.left = new Node( 1 ); root.left.right = new Node( 4 ); printLevel(root); } } // This code is contributed by Sumit Ghosh |
Python3
# Python3 program to print levels # of all nodes # Helper function that allocates a new # node with the given data and None # left and right poers. class newNode: # Construct to create a new node def __init__( self , key): self .data = key self .left = None self .right = None def printLevel( root): if ( not root): return # queue to hold tree node with level q = [] # let root node be at level 1 q.append([root, 1 ]) p = [] # Do level Order Traversal of tree while ( len (q)): p = q[ 0 ] q.pop( 0 ) print ( "Level of" , p[ 0 ].data, "is" , p[ 1 ]) if (p[ 0 ].left): q.append([p[ 0 ].left, p[ 1 ] + 1 ]) if (p[ 0 ].right): q.append([p[ 0 ].right, p[ 1 ] + 1 ]) # Driver Code if __name__ = = '__main__' : """ Let us create Binary Tree shown in above example """ root = newNode( 3 ) root.left = newNode( 2 ) root.right = newNode( 5 ) root.left.left = newNode( 1 ) root.left.right = newNode( 4 ) printLevel(root) # This code is contributed by # Shubham Singh(SHUBHAMSINGH10) |
C#
using System; using System.Collections.Generic; // C# program to print // levels of all nodes public class Print_Level_Btree { /* A tree node structure */ public class Node { public int data; public Node left; public Node right; public Node( int data) { this .data = data; left = null ; right = null ; } } // User defined class Pair to hold // the node and its level public class Pair { public Node n; public int i; public Pair(Node n, int i) { this .n = n; this .i = i; } } // function to print the nodes and // its corresponding level public static void printLevel(Node root) { if (root == null ) { return ; } // queue to hold tree node with level LinkedList<Pair> q = new LinkedList<Pair>(); // let root node be at level 1 q.AddLast( new Pair(root, 1)); Pair p; // Do level Order Traversal of tree while (q.Count > 0) { p = q.First.Value; q.RemoveFirst(); Console.WriteLine( "Level of " + p.n.data + " is " + p.i); if (p.n.left != null ) { q.AddLast( new Pair(p.n.left, p.i + 1)); } if (p.n.right != null ) { q.AddLast( new Pair(p.n.right, p.i + 1)); } } } /* Driver function to test above functions */ public static void Main( string [] args) { Node root = null ; /* Constructing tree given in the above figure */ root = new Node(3); root.left = new Node(2); root.right = new Node(5); root.left.left = new Node(1); root.left.right = new Node(4); printLevel(root); } } // This code is contributed by Shrikant13 |
Javascript
<script> // Javascript program to print // levels of all nodes class Node { constructor(data) { this .left = null ; this .right = null ; this .data = data; } } // function to print the nodes and // its corresponding level function printLevel(root) { if (root == null ) return ; // queue to hold tree node with level let q = []; // let root node be at level 1 q.push([root, 1]); let p; // Do level Order Traversal of tree while (q.length > 0) { p = q[0]; q.shift(); document.write( "Level of " + p[0].data + " is " + p[1] + "</br>" ); if (p[0].left != null ) q.push([p[0].left, p[1] + 1]); if (p[0].right != null ) q.push([p[0].right, p[1] + 1]); } } let root = null ; /* Constructing tree given in the above figure */ root = new Node(3); root.left = new Node(2); root.right = new Node(5); root.left.left = new Node(1); root.left.right = new Node(4); printLevel(root); // This code is contributed by suresh07. </script> |
输出:
Level of 3 is 1Level of 2 is 2Level of 5 is 2Level of 1 is 3Level of 4 is 3
时间复杂性: O(n),其中n是给定二叉树中的节点数。
本文由 阿披实拉吉普特 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END