Imprimir Nodes a k distancia de la raíz | Iterativo

Dada una raíz de un árbol y un número entero k. Imprime todos los Nodes que están a k distancia de la raíz.

Ejemplo :

C++

// CPP program to print all nodes of level k
// iterative approach 
/* binary tree
root is at level 1
  
                20
              /   \
            10    30
           / \    / \
          5  15  25  40
             /
            12  */
#include <bits/stdc++.h>
using namespace std;
  
// Node of binary tree
struct Node {
    int data;
    Node* left, * right;
};
  
// Function to add a new node
Node* newNode(int data)
{
    Node* newnode = new Node();
    newnode->data = data;
    newnode->left = newnode->right = NULL;
}
  
// Function to print nodes of given level
bool printKDistant(Node* root, int klevel)
{
    queue<Node*> q;
    int level = 1;
    bool flag = false;
    q.push(root);
  
    // extra NULL is pushed to keep track
    // of all the nodes to be pushed before
    // level is incremented by 1
    q.push(NULL);
    while (!q.empty()) {
        Node* temp = q.front();
  
        // print when level is equal to k
        if (level == klevel && temp != NULL) {
            flag = true;
            cout << temp->data << " ";
        }
        q.pop();
        if (temp == NULL) {
            if (q.front())
                q.push(NULL);
            level += 1;
  
            // break the loop if level exceeds
            // the given level number
            if (level > klevel)
                break;
        } else {
            if (temp->left)
                q.push(temp->left);
  
            if (temp->right)
                q.push(temp->right);
        }
    }
    cout << endl;
  
    return flag;
}
  
// Driver code
int main()
{
    // create a binary tree
    Node* root = newNode(20);
    root->left = newNode(10);
    root->right = newNode(30);
    root->left->left = newNode(5);
    root->left->right = newNode(15);
    root->left->right->left = newNode(12);
    root->right->left = newNode(25);
    root->right->right = newNode(40);
  
    cout << "data at level 1 : ";
    int ret = printKDistant(root, 1);
    if (ret == false)
        cout << "Number exceeds total number of levels\n";
  
    cout << "data at level 2 : ";
    ret = printKDistant(root, 2);
    if (ret == false)
        cout << "Number exceeds total number of levels\n";
  
    cout << "data at level 3 : ";
    ret = printKDistant(root, 3);
    if (ret == false)
        cout << "Number exceeds total number of levels\n";
  
    cout << "data at level 6 : ";
    ret = printKDistant(root, 6);
    if (ret == false)
        cout << "Number exceeds total number of levels\n";
  
    return 0;
}

Java

// Java program to print all nodes of level k 
// iterative approach 
/* binary tree 
root is at level 1 
  
                20 
            / \ 
            10 30 
        / \ / \ 
        5 15 25 40 
            / 
            12 */
              
import java.util.*;
class GFG
{
  
// Node of binary tree 
static class Node 
{ 
    int data; 
    Node left, right; 
}
  
// Function to add a new node 
static Node newNode(int data) 
{ 
    Node newnode = new Node(); 
    newnode.data = data; 
    newnode.left = newnode.right = null; 
    return newnode;
} 
  
// Function to print nodes of given level 
static boolean printKDistant(Node root, int klevel) 
{ 
    Queue<Node> q = new LinkedList<>(); 
    int level = 1; 
    boolean flag = false; 
    q.add(root); 
  
    // extra null is added to keep track 
    // of all the nodes to be added before 
    // level is incremented by 1 
    q.add(null); 
    while (q.size() > 0) 
    { 
        Node temp = q.peek(); 
  
        // print when level is equal to k 
        if (level == klevel && temp != null)
        { 
            flag = true; 
            System.out.print( temp.data + " "); 
        } 
        q.remove(); 
        if (temp == null)
        { 
            if (q.peek() != null) 
                q.add(null); 
            level += 1; 
  
            // break the loop if level exceeds 
            // the given level number 
            if (level > klevel) 
                break; 
        }
        else 
        { 
            if (temp.left != null) 
                q.add(temp.left); 
  
            if (temp.right != null) 
                q.add(temp.right); 
        } 
    } 
    System.out.println();
    return flag; 
} 
  
// Driver code 
public static void main(String srga[])
{ 
    // create a binary tree 
    Node root = newNode(20); 
    root.left = newNode(10); 
    root.right = newNode(30); 
    root.left.left = newNode(5); 
    root.left.right = newNode(15); 
    root.left.right.left = newNode(12); 
    root.right.left = newNode(25); 
    root.right.right = newNode(40); 
  
    System.out.print( "data at level 1 : "); 
    boolean ret = printKDistant(root, 1); 
    if (ret == false) 
        System.out.print( "Number exceeds total " + 
                            "number of levels\n"); 
  
    System.out.print("data at level 2 : "); 
    ret = printKDistant(root, 2); 
    if (ret == false) 
        System.out.print("Number exceeds total " +
                            "number of levels\n"); 
  
    System.out.print( "data at level 3 : "); 
    ret = printKDistant(root, 3); 
    if (ret == false) 
        System.out.print("Number exceeds total " +
                        "number of levels\n"); 
  
    System.out.print( "data at level 6 : "); 
    ret = printKDistant(root, 6); 
    if (ret == false) 
        System.out.print( "Number exceeds total" +
                            "number of levels\n"); 
  
} 
}
  
// This code is contributed by Arnab Kundu

Python3

# Python3 program to print all nodes of level k 
# iterative approach 
""" binary tree 
root is at level 1 
  
                20 
            / \ 
            10 30 
        / \ / \ 
        5 15 25 40 
            / 
            12 """
  
# Node of binary tree 
# Function to add a new node
class newNode: 
    def __init__(self, data): 
        self.data = data 
        self.left = self.right = None
          
# Function to print nodes of given level 
def printKDistant( root, klevel):
  
    q = [] 
    level = 1
    flag = False
    q.append(root) 
  
    # extra None is appended to keep track 
    # of all the nodes to be appended 
    # before level is incremented by 1 
    q.append(None) 
    while (len(q)):
        temp = q[0] 
  
        # print when level is equal to k 
        if (level == klevel and temp != None):
            flag = True
            print(temp.data, end = " ")
          
        q.pop(0) 
        if (temp == None) :
            if (len(q)): 
                q.append(None) 
            level += 1
  
            # break the loop if level exceeds 
            # the given level number 
            if (level > klevel) :
                break
        else:
            if (temp.left) :
                q.append(temp.left) 
  
            if (temp.right) :
                q.append(temp.right) 
    print()
  
    return flag
      
# Driver Code 
if __name__ == '__main__':
    root = newNode(20) 
    root.left = newNode(10) 
    root.right = newNode(30) 
    root.left.left = newNode(5) 
    root.left.right = newNode(15) 
    root.left.right.left = newNode(12) 
    root.right.left = newNode(25) 
    root.right.right = newNode(40) 
  
    print("data at level 1 : ", end = "")
    ret = printKDistant(root, 1) 
    if (ret == False): 
        print("Number exceeds total",
                  "number of levels")
  
    print("data at level 2 : ", end = "")
    ret = printKDistant(root, 2) 
    if (ret == False) :
        print("Number exceeds total", 
                  "number of levels") 
  
    print("data at level 3 : ", end = "")
    ret = printKDistant(root, 3) 
    if (ret == False) :
        print("Number exceeds total",
                  "number of levels")
  
    print("data at level 6 : ", end = "") 
    ret = printKDistant(root, 6) 
    if (ret == False):
        print("Number exceeds total number of levels")
  
# This code is contributed 
# by SHUBHAMSINGH10

C#

// C# program to print all nodes of level k 
// iterative approach 
/* binary tree 
root is at level 1 
  
                20 
            / \ 
            10 30 
        / \ / \ 
        5 15 25 40 
            / 
            12 */
              
using System;
using System.Collections.Generic;
  
class GFG 
{ 
  
// Node of binary tree 
public class Node 
{ 
    public int data; 
    public Node left, right; 
} 
  
// Function to add a new node 
static Node newNode(int data) 
{ 
    Node newnode = new Node(); 
    newnode.data = data; 
    newnode.left = newnode.right = null; 
    return newnode; 
} 
  
// Function to print nodes of given level 
static Boolean printKDistant(Node root, int klevel) 
{ 
    Queue<Node> q = new Queue<Node>(); 
    int level = 1; 
    Boolean flag = false; 
    q.Enqueue(root); 
  
    // extra null is added to keep track 
    // of all the nodes to be added before 
    // level is incremented by 1 
    q.Enqueue(null); 
    while (q.Count > 0) 
    { 
        Node temp = q.Peek(); 
  
        // print when level is equal to k 
        if (level == klevel && temp != null) 
        { 
            flag = true; 
            Console.Write( temp.data + " "); 
        } 
        q.Dequeue(); 
        if (temp == null) 
        { 
            if (q.Count > 0&&q.Peek() != null) 
                q.Enqueue(null); 
            level += 1; 
  
            // break the loop if level exceeds 
            // the given level number 
            if (level > klevel) 
                break; 
        } 
        else
        { 
            if (temp.left != null) 
                q.Enqueue(temp.left); 
  
            if (temp.right != null) 
                q.Enqueue(temp.right); 
        } 
    } 
    Console.Write("\n"); 
    return flag; 
} 
  
// Driver code 
public static void Main(String []srga) 
{ 
    // create a binary tree 
    Node root = newNode(20); 
    root.left = newNode(10); 
    root.right = newNode(30); 
    root.left.left = newNode(5); 
    root.left.right = newNode(15); 
    root.left.right.left = newNode(12); 
    root.right.left = newNode(25); 
    root.right.right = newNode(40); 
  
    Console.Write( "data at level 1 : "); 
    Boolean ret = printKDistant(root, 1); 
    if (ret == false) 
        Console.Write( "Number exceeds total " + 
                            "number of levels\n"); 
  
    Console.Write("data at level 2 : "); 
    ret = printKDistant(root, 2); 
    if (ret == false) 
        Console.Write("Number exceeds total " + 
                            "number of levels\n"); 
  
    Console.Write( "data at level 3 : "); 
    ret = printKDistant(root, 3); 
    if (ret == false) 
        Console.Write("Number exceeds total " + 
                        "number of levels\n"); 
  
    Console.Write( "data at level 6 : "); 
    ret = printKDistant(root, 6); 
    if (ret == false) 
        Console.Write( "Number exceeds total" + 
                            "number of levels\n"); 
  
} 
} 
  
// This code is contributed by Princi Singh

Javascript

<script>
    // Javascript program to print all nodes of level k 
    // iterative approach 
    /* binary tree 
    root is at level 1 
  
                    20 
                / \ 
                10 30 
            / \ / \ 
            5 15 25 40 
                / 
                12 */
      
    class Node
    {
        constructor(data) {
           this.left = null;
           this.right = null;
           this.data = data;
        }
    }
      
    // Function to add a new node 
    function newNode(data) 
    { 
        let newnode = new Node(data); 
        return newnode;
    } 
  
    // Function to print nodes of given level 
    function printKDistant(root, klevel) 
    { 
        let q = []; 
        let level = 1; 
        let flag = false; 
        q.push(root); 
  
        // extra null is added to keep track 
        // of all the nodes to be added before 
        // level is incremented by 1 
        q.push(null); 
        while (q.length > 0) 
        { 
            let temp = q[0]; 
  
            // print when level is equal to k 
            if (level == klevel && temp != null)
            { 
                flag = true; 
                document.write( temp.data + " "); 
            } 
            q.shift(); 
            if (temp == null)
            { 
                if (q[0] != null) 
                    q.push(null); 
                level += 1; 
  
                // break the loop if level exceeds 
                // the given level number 
                if (level > klevel) 
                    break; 
            }
            else 
            { 
                if (temp.left != null) 
                    q.push(temp.left); 
  
                if (temp.right != null) 
                    q.push(temp.right); 
            } 
        } 
        document.write("</br>");
        return flag; 
    } 
      
    // create a binary tree 
    let root = newNode(20); 
    root.left = newNode(10); 
    root.right = newNode(30); 
    root.left.left = newNode(5); 
    root.left.right = newNode(15); 
    root.left.right.left = newNode(12); 
    root.right.left = newNode(25); 
    root.right.right = newNode(40); 
    
    document.write( "data at level 1 : "); 
    let ret = printKDistant(root, 1); 
    if (ret == false) 
        document.write( "Number exceeds total " + 
                            "number of levels" + "</br>"); 
    
    document.write("data at level 2 : "); 
    ret = printKDistant(root, 2); 
    if (ret == false) 
        document.write("Number exceeds total " +
                            "number of levels" + "</br>"); 
    
    document.write( "data at level 3 : "); 
    ret = printKDistant(root, 3); 
    if (ret == false) 
        document.write("Number exceeds total " +
                        "number of levels" + "</br>"); 
    
    document.write( "data at level 6 : "); 
    ret = printKDistant(root, 6); 
    if (ret == false) 
        document.write( "Number exceeds total" +
                            "number of levels" + "</br>");
                             
// This code is contributed by suresh07.            
</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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *