📌  相关文章
📜  打印二叉树中所有节点的级别

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

打印二叉树中所有节点的级别

给定一个二叉树和一个键,编写一个函数来打印给定二叉树中所有键的级别。
例如,考虑下面的树。如果输入键是 3,那么你的函数应该返回 1。如果输入键是 4,那么你的函数应该返回 3。对于键中不存在的键,那么你的函数应该返回 0。

Input:
       3
      / \
     2   5
    / \
   1   4

output:
 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 
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 > q;
 
    q.push({root, 1}); // let root node be at level 1
 
    pair p;
 
    // Do level Order Traversal of tree
    while (!q.empty()) {
        p = q.front();
        q.pop();
 
        cout << "Level of " << p.first->data
             << " is " << p.second << "\n";
 
        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 q = new LinkedList();
      
        // 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 pointers.                                    
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 q = new LinkedList();
 
        // 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


输出 :

Level of 3 is 1
Level of 2 is 2
Level of 5 is 2
Level of 1 is 3
Level of 4 is 3

时间复杂度: O(n),其中 n 是给定二叉树中的节点数。