Recorrido de la ruta límite de raíz a hoja de un árbol binario

Dado un árbol binario , la tarea es imprimir todas las rutas de la raíz a la hoja de este árbol en el recorrido de la ruta Boundary Root to Leaf. 

Recorrido de ruta de raíz a hoja límite: en este recorrido, la primera ruta de raíz a hoja (límite izquierdo) se imprime primero, seguida por la última ruta de raíz a hoja (límite derecho) en orden inverso. Luego, el proceso se repite para la segunda y penúltima ruta de raíz a hoja, hasta que se haya impreso toda la ruta de raíz a hoja. 
 

Ejemplos:  

Input:  
                 1
                /  \ 
              15    13 
             /     /   \ 
            11    7     29 
                   \    / 
                   2   3  
Output:  1 15 11
         3 29 13 1
         1 13 7 2

Explanation:
First of all print first path from Root to the Leaf 
which is 1 15 11
Then, print the last path from the Leaf to Root
which is 3 29 13 1
Then, print the second path from Root to Leaf 
which is 1 13 7 2

Input:
                  7
                /  \ 
              23     41 
             /  \      \
            31   16     3 
           / \     \    / 
          2   5    17  11    
                   /
                  23 

Output:  7 23 31 2
         11 3 41 7
         7 23 31 5
         23 17 16 23 7

Enfoque: Para imprimir caminos en Raíz de límite a Trazado transversal de hoja,  

  • Primero tenemos que hacer Preorder Traversal del árbol binario para obtener todos los valores de Node de una ruta en particular.
  • Aquí se usa una array para almacenar la ruta del árbol mientras se realiza el recorrido Preorder y luego se almacena esta ruta en la array.
  • Luego, para cada ruta, imprima la array en la primera fila ( de izquierda a derecha ), luego en la última fila ( de derecha a izquierda ), y así sucesivamente.

A continuación se muestra la implementación del enfoque anterior:  

C++

// C++ implementation to print the
// path in Boundary Root to Leaf
// Path Traversal.
 
#include <bits/stdc++.h>
using namespace std;
 
// Structure of tree node
struct Node {
    int key;
    struct Node *left, *right;
};
 
// Utility function to
// create a new node
Node* newNode(int key)
{
    Node* temp = new Node;
    temp->key = key;
    temp->left = temp->right = NULL;
    return (temp);
}
// Function to calculate the length
// of longest path of the tree
int lengthOfLongestPath(struct Node* node)
{
    // Base Case
    if (node == NULL)
        return 0;
 
    // Recursive call to calculate the length
    // of longest path
    int left = lengthOfLongestPath(node->left);
    int right = lengthOfLongestPath(node->right);
 
    return 1 + (left > right ? left : right);
}
 
// Function to copy the complete
// path in a matrix
void copyPath(int* path, int index,
              int** mtrx, int row)
{
    // Loop to copy the path
    for (int i = 0; i < index; i++) {
        mtrx[row][i] = path[i];
    }
}
 
// Function to store all path
// one by one in matrix
void storePath(struct Node* node,
               int* path, int index,
               int** mtrx, int& row)
{
    // Base condition
    if (node == NULL) {
        return;
    }
 
    // Inserting the current node
    // into the current path
    path[index] = node->key;
 
    // Recursive call for
    // the left sub tree
    storePath(node->left, path,
              index + 1, mtrx, row);
 
    // Recursive call for
    // the right sub tree
    storePath(node->right, path,
              index + 1, mtrx, row);
 
    // Condition to check that current
    // node is a leaf node or not
    if (node->left == NULL
        && node->right == NULL) {
 
        // Incrementation for changing
        // row
        row = row + 1;
        // Function call for copying
        // the path
        copyPath(path, index + 1,
                 mtrx, row);
    }
}
 
// Function to calculate
// total path
int totalPath(Node* node)
{
    static int count = 0;
    if (node == NULL) {
        return count;
    }
    if (node->left == NULL
        && node->right == NULL) {
        return count + 1;
    }
    count = totalPath(node->left);
    return totalPath(node->right);
}
 
// Function for Clockwise Spiral Traversal
// of Binary Tree
void traverse_matrix(int** mtrx,
                     int height,
                     int width)
{
    int j = 0, k1 = 0, k2 = 0;
    int k3 = height - 1;
    int k4 = width - 1;
 
    for (int round = 0; round < height/2; round++)
    {
        for (j = k2; j < width; j++) {
 
            // Only print those values which
            // are not MAX_INTEGER
            if (mtrx[k1][j] != INT_MAX) {
                cout << mtrx[k1][j] << " ";
            }
        }
        cout << endl;
 
        k2 = 0;
        k1++;
 
        for (j = k4; j >= 0; j--) {
 
            // Only print those values which
            // are not MAX_INTEGER
            if (mtrx[k3][j] != INT_MAX) {
                cout << mtrx[k3][j] << " ";
            }
        }
        cout << endl;
 
        k4 = width - 1;
        k3--;
    }
 
    // Condition (one row may be left
    // traversing)
    // If number of rows in matrix are odd
    if (height % 2 != 0) {
        for (j = k2; j < width; j++) {
 
            // Only print those values which are
            // not MAX_INTEGER
            if (mtrx[k1][j] != INT_MAX) {
                cout << mtrx[k1][j] << " ";
            }
        }
    }
}
 
// Function to print all the paths
// in Boundary Root to Leaf
// Path Traversal
void PrintPath(Node* node)
{
    // Calculate the length of
    // longest path of the tree
    int max_len = lengthOfLongestPath(node);
     
    // Calculate total path
    int total_path = totalPath(node);
     
    // Array to store path
    int* path = new int[max_len];
    memset(path, 0, sizeof(path));
 
    // Use double pointer to create
    // 2D array which will contain
    // all path of the tree
    int** mtrx = new int*[total_path];
 
    // Initialize width for each row
    // of matrix
    for (int i = 0; i < total_path; i++)
    {
        mtrx[i] = new int[max_len];
    }
 
    // Initialize complete matrix with
    // MAX INTEGER(purpose garbage)
    for (int i = 0; i < total_path; i++)
    {
        for (int j = 0; j < max_len; j++)
        {
            mtrx[i][j] = INT_MAX;
        }
    }
 
    int row = -1;
    storePath(node, path, 0, mtrx, row);
 
    // Print the circular clockwise spiral
    // traversal of the tree
    traverse_matrix(mtrx, total_path,
                    max_len);
 
    // Release extra memory
    // allocated for matrix
    free(mtrx);
}
 
// Driver Code
int main()
{
    /*      10 
           /  \ 
         13    11 
              /  \ 
            19    23 
           / \    / \ 
          21 29 43  15
                   /
                  7 */
 
    // Create Binary Tree as shown
 
    Node* root = newNode(10);
    root->left = newNode(13);
    root->right = newNode(11);
 
    root->right->left = newNode(19);
    root->right->right = newNode(23);
 
    root->right->left->left = newNode(21);
    root->right->left->right = newNode(29);
    root->right->right->left = newNode(43);
    root->right->right->right = newNode(15);
    root->right->right->right->left = newNode(7);
 
    // Function Call
    PrintPath(root);
    return 0;
}

Java

// Java implementation to print the 
// path in Boundary Root to Leaf 
// Path Traversal.
import java.util.*;
 
class GFG{
 
static int row;
static int count = 0;
 
// Structure of tree node
static class Node
{
    int key;
    Node left, right;
};
 
// Utility function to
// create a new node
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    temp.left = temp.right = null;
    return (temp);
}
 
// Function to calculate the length
// of longest path of the tree
static int lengthOfLongestPath(Node node)
{
     
    // Base Case
    if (node == null)
        return 0;
 
    // Recursive call to calculate the
    // length of longest path
    int left = lengthOfLongestPath(node.left);
    int right = lengthOfLongestPath(node.right);
 
    return 1 + (left > right ? left : right);
}
 
// Function to copy the complete
// path in a matrix
static void copyPath(int[] path, int index,
                     int[][] mtrx, int r)
{
     
    // Loop to copy the path
    for(int i = 0; i < index; i++)
    {
        mtrx[r][i] = path[i];
    }
}
 
// Function to store all path
// one by one in matrix
static void storePath(Node node, int[] path,
                      int index, int[][] mtrx)
{
     
    // Base condition
    if (node == null)
    {
        return;
    }
 
    // Inserting the current node
    // into the current path
    path[index] = node.key;
 
    // Recursive call for
    // the left sub tree
    storePath(node.left, path,
              index + 1, mtrx);
 
    // Recursive call for
    // the right sub tree
    storePath(node.right, path,
              index + 1, mtrx);
 
    // Condition to check that current
    // node is a leaf node or not
    if (node.left == null &&
        node.right == null)
    {
 
        // Incrementation for changing
        // row
        row = row + 1;
         
        // Function call for copying
        // the path
        copyPath(path, index + 1, mtrx, row);
    }
}
 
// Function to calculate
// total path
static int totalPath(Node node)
{
    if (node == null)
    {
        return count;
    }
    if (node.left == null &&
        node.right == null)
    {
        return count + 1;
    }
    count = totalPath(node.left);
    return totalPath(node.right);
}
 
// Function for Clockwise Spiral Traversal
// of Binary Tree
static void traverse_matrix(int[][] mtrx,
                            int height,
                            int width)
{
    int j = 0, k1 = 0, k2 = 0;
    int k3 = height - 1;
    int k4 = width - 1;
 
    for(int round = 0;
            round < height / 2;
            round++)
    {
        for(j = k2; j < width; j++)
        {
             
            // Only print those values which
            // are not MAX_INTEGER
            if (mtrx[k1][j] != Integer.MAX_VALUE)
            {
                System.out.print(mtrx[k1][j] + " ");
            }
        }
        System.out.println();
 
        k2 = 0;
        k1++;
 
        for(j = k4; j >= 0; j--)
        {
 
            // Only print those values which
            // are not MAX_INTEGER
            if (mtrx[k3][j] != Integer.MAX_VALUE)
            {
                System.out.print(mtrx[k3][j] + " ");
            }
        }
        System.out.println();
 
        k4 = width - 1;
        k3--;
    }
 
    // Condition (one row may be left
    // traversing)
    // If number of rows in matrix are odd
    if (height % 2 != 0)
    {
        for(j = k2; j < width; j++)
        {
 
            // Only print those values which are
            // not MAX_INTEGER
            if (mtrx[k1][j] != Integer.MAX_VALUE)
            {
                System.out.print(mtrx[k1][j] + " ");
            }
        }
    }
}
 
// Function to print all the paths
// in Boundary Root to Leaf
// Path Traversal
static void PrintPath(Node node)
{
     
    // Calculate the length of
    // longest path of the tree
    int max_len = lengthOfLongestPath(node);
 
    // Calculate total path
    int total_path = totalPath(node);
 
    // Array to store path
    int[] path = new int[max_len];
    Arrays.fill(path, 0);
 
    // Use double pointer to create
    // 2D array which will contain
    // all path of the tree
    int[][] mtrx = new int[total_path][max_len];
 
    // Initialize complete matrix with
    // MAX INTEGER(purpose garbage)
    for(int i = 0; i < total_path; i++)
    {
        for(int j = 0; j < max_len; j++)
        {
            mtrx[i][j] = Integer.MAX_VALUE;
        }
    }
 
    row = -1;
    storePath(node, path, 0, mtrx);
 
    // Print the circular clockwise spiral
    // traversal of the tree
    traverse_matrix(mtrx, total_path, max_len);
}
 
// Driver Code
public static void main(String[] args)
{
 
    /* 10
      /  \
     13  11
        /  \
       19   23
      / \   / \
     21 29 43  15
              /
             7 */
              
    // Create Binary Tree as shown
    Node root = newNode(10);
    root.left = newNode(13);
    root.right = newNode(11);
 
    root.right.left = newNode(19);
    root.right.right = newNode(23);
 
    root.right.left.left = newNode(21);
    root.right.left.right = newNode(29);
    root.right.right.left = newNode(43);
    root.right.right.right = newNode(15);
    root.right.right.right.left = newNode(7);
 
    // Function Call
    PrintPath(root);
}
}
 
// This code is contributed by sanjeev2552

Python3

# Python3 implementation to print the
# path in Boundary Root to Leaf
# Path Traversal.
  
# Structure of tree node
class Node:
     
    def __init__(self, key):
         
        self.key = key
        self.left = None
        self.right = None
 
row = 0
count = 0
  
# Utility function to
# create a new node
def newNode(key):
     
    temp = Node(key)
    return temp
   
# Function to calculate the length
# of longest path of the tree
def lengthOfLongestPath(node):
 
    # Base Case
    if (node == None):
        return 0;
  
    # Recursive call to calculate the length
    # of longest path
    left = lengthOfLongestPath(node.left);
    right = lengthOfLongestPath(node.right);
  
    return 1 + (left if left > right else right);
 
# Function to copy the complete
# path in a matrix
def copyPath(path, index, mtrx, r):
 
    # Loop to copy the path
    for i in range(index):
     
        mtrx[r][i] = path[i];
 
# Function to store all path
# one by one in matrix
def storePath(node, path, index, mtrx):
    global row
     
    # Base condition
    if (node == None):
        return;
  
    # Inserting the current node
    # into the current path
    path[index] = node.key;
  
    # Recursive call for
    # the left sub tree
    storePath(node.left, path,
              index + 1, mtrx);
  
    # Recursive call for
    # the right sub tree
    storePath(node.right, path,
              index + 1, mtrx);
  
    # Condition to check that current
    # node is a leaf node or not
    if (node.left == None and node.right == None):
  
        # Incrementation for changing
        # row
        row = row + 1;
       
        # Function call for copying
        # the path
        copyPath(path, index + 1,
                 mtrx, row);
      
# Function to calculate
# total path
def totalPath(node):
    global count
     
    if (node == None):
        return count;
     
    if (node.left == None and node.right == None):
        return count + 1;
     
    count = totalPath(node.left);
    return totalPath(node.right);
  
# Function for Clockwise Spiral Traversal
# of Binary Tree
def traverse_matrix( mtrx, height, width):
 
    j = 0
    k1 = 0
    k2 = 0;
    k3 = height - 1;
    k4 = width - 1;
     
    for round in range(height//2):
        for j in range(k2, width):
  
            # Only print those values which
            # are not MAX_INTEGER
            if (mtrx[k1][j] != 1000000):
                print(mtrx[k1][j], end=' ')
         
        print()       
        k2 = 0;
        k1 += 1
         
        for j in range(k4, -1, -1):
  
            # Only print those values which
            # are not MAX_INTEGER
            if (mtrx[k3][j] != 1000000):
                print(mtrx[k3][j], end=' ')
         
        print()
        k4 = width - 1;
        k3 -= 1
  
    # Condition (one row may be left
    # traversing)
    # If number of rows in matrix are odd
    if (height % 2 != 0):
         
        for j in range(k2, width):
  
            # Only print those values which are
            # not MAX_INTEGER
            if (mtrx[k1][j] != 1000000):
                print(mtrx[k1][j], end=' ')
              
# Function to print all the paths
# in Boundary Root to Leaf
# Path Traversal
def PrintPath(node):   
    global row
     
    # Calculate the length of
    # longest path of the tree
    max_len = lengthOfLongestPath(node);
      
    # Calculate total path
    total_path = totalPath(node);
      
    # Array to store path
    path = [0 for i in range(max_len)]
  
    # Use double pointer to create
    # 2D array which will contain
    # all path of the tree
    mtrx = [[1000000 for j in range(max_len)]
                for i in range(total_path)]
      
    row = -1;
    storePath(node, path, 0, mtrx);
  
    # Print the circular clockwise spiral
    # traversal of the tree
    traverse_matrix(mtrx, total_path,
                    max_len);
  
# Driver Code
if __name__=='__main__':
     
    '''      10 
           /  \ 
         13    11 
              /  \ 
            19    23 
           / \    / \ 
          21 29 43  15
                   /
                  7 '''
  
    # Create Binary Tree as shown
  
    root = newNode(10);
    root.left = newNode(13);
    root.right = newNode(11);
  
    root.right.left = newNode(19);
    root.right.right = newNode(23);
  
    root.right.left.left = newNode(21);
    root.right.left.right = newNode(29);
    root.right.right.left = newNode(43);
    root.right.right.right = newNode(15);
    root.right.right.right.left = newNode(7);
  
    # Function Call
    PrintPath(root);
     
    # This code is contributed by pratham76

C#

// C# implementation to print the 
// path in Boundary Root to Leaf 
// Path Traversal.
 
using System;
using System.Collections;
  
class GFG{
  
static int row;
static int count = 0;
  
// Structure of tree node
public class Node
{
    public int key;
    public Node left, right;
};
  
// Utility function to
// create a new node
static Node newNode(int key)
{
    Node temp = new Node();
    temp.key = key;
    temp.left = temp.right = null;
    return (temp);
}
  
// Function to calculate the length
// of longest path of the tree
static int lengthOfLongestPath(Node node)
{
      
    // Base Case
    if (node == null)
        return 0;
  
    // Recursive call to calculate the
    // length of longest path
    int left = lengthOfLongestPath(node.left);
    int right = lengthOfLongestPath(node.right);
  
    return 1 + (left > right ? left : right);
}
  
// Function to copy the complete
// path in a matrix
static void copyPath(int[] path, int index,
                     int[,] mtrx, int r)
{
      
    // Loop to copy the path
    for(int i = 0; i < index; i++)
    {
        mtrx[r, i] = path[i];
    }
}
  
// Function to store all path
// one by one in matrix
static void storePath(Node node, int[] path,
                      int index, int[,] mtrx)
{
      
    // Base condition
    if (node == null)
    {
        return;
    }
  
    // Inserting the current node
    // into the current path
    path[index] = node.key;
  
    // Recursive call for
    // the left sub tree
    storePath(node.left, path,
              index + 1, mtrx);
  
    // Recursive call for
    // the right sub tree
    storePath(node.right, path,
              index + 1, mtrx);
  
    // Condition to check that current
    // node is a leaf node or not
    if (node.left == null &&
        node.right == null)
    {
  
        // Incrementation for changing
        // row
        row = row + 1;
          
        // Function call for copying
        // the path
        copyPath(path, index + 1, mtrx, row);
    }
}
  
// Function to calculate
// total path
static int totalPath(Node node)
{
    if (node == null)
    {
        return count;
    }
    if (node.left == null &&
        node.right == null)
    {
        return count + 1;
    }
    count = totalPath(node.left);
    return totalPath(node.right);
}
  
// Function for Clockwise Spiral Traversal
// of Binary Tree
static void traverse_matrix(int[,] mtrx,
                            int height,
                            int width)
{
    int j = 0, k1 = 0, k2 = 0;
    int k3 = height - 1;
    int k4 = width - 1;
  
    for(int round = 0;
            round < height / 2;
            round++)
    {
        for(j = k2; j < width; j++)
        {
              
            // Only print those values which
            // are not MAX_INTEGER
            if (mtrx[k1, j] != 10000000)
            {
                Console.Write(mtrx[k1, j] + " ");
            }
        }
        Console.WriteLine();
  
        k2 = 0;
        k1++;
  
        for(j = k4; j >= 0; j--)
        {
  
            // Only print those values which
            // are not MAX_INTEGER
            if (mtrx[k3, j] != 10000000)
            {
                Console.Write(mtrx[k3, j] + " ");
            }
        }
        Console.WriteLine();
  
        k4 = width - 1;
        k3--;
    }
  
    // Condition (one row may be left
    // traversing)
    // If number of rows in matrix are odd
    if (height % 2 != 0)
    {
        for(j = k2; j < width; j++)
        {
  
            // Only print those values which are
            // not MAX_INTEGER
            if (mtrx[k1, j] != 10000000)
            {
                Console.Write(mtrx[k1, j] + " ");
            }
        }
    }
}
  
// Function to print all the paths
// in Boundary Root to Leaf
// Path Traversal
static void PrintPath(Node node)
{
      
    // Calculate the length of
    // longest path of the tree
    int max_len = lengthOfLongestPath(node);
  
    // Calculate total path
    int total_path = totalPath(node);
  
    // Array to store path
    int[] path = new int[max_len];
    Array.Fill(path, 0);
  
    // Use double pointer to create
    // 2D array which will contain
    // all path of the tree
    int[,] mtrx = new int[total_path, max_len];
  
    // Initialize complete matrix with
    // MAX INTEGER(purpose garbage)
    for(int i = 0; i < total_path; i++)
    {
        for(int j = 0; j < max_len; j++)
        {
            mtrx[i, j] = 10000000;
        }
    }
  
    row = -1;
    storePath(node, path, 0, mtrx);
  
    // Print the circular clockwise spiral
    // traversal of the tree
    traverse_matrix(mtrx, total_path, max_len);
}
  
// Driver Code
public static void Main(string[] args)
{
  
    /* 10
      /  \
     13  11
        /  \
       19   23
      / \   / \
     21 29 43  15
              /
             7 */
               
    // Create Binary Tree as shown
    Node root = newNode(10);
    root.left = newNode(13);
    root.right = newNode(11);
  
    root.right.left = newNode(19);
    root.right.right = newNode(23);
  
    root.right.left.left = newNode(21);
    root.right.left.right = newNode(29);
    root.right.right.left = newNode(43);
    root.right.right.right = newNode(15);
    root.right.right.right.left = newNode(7);
  
    // Function Call
    PrintPath(root);
}
}
 
// This code is contributed by rutvik_56

Javascript

<script>
 
    // JavaScript implementation to print the
    // path in Boundary Root to Leaf
    // Path Traversal.
     
    let row;
    let count = 0;
 
    // Structure of tree node
    class Node
    {
        constructor(key) {
           this.left = null;
           this.right = null;
           this.key = key;
        }
    }
 
    // Utility function to
    // create a new node
    function newNode(key)
    {
        let temp = new Node(key);
        return (temp);
    }
 
    // Function to calculate the length
    // of longest path of the tree
    function lengthOfLongestPath(node)
    {
 
        // Base Case
        if (node == null)
            return 0;
 
        // Recursive call to calculate the
        // length of longest path
        let left = lengthOfLongestPath(node.left);
        let right = lengthOfLongestPath(node.right);
 
        return 1 + (left > right ? left : right);
    }
 
    // Function to copy the complete
    // path in a matrix
    function copyPath(path, index, mtrx, r)
    {
 
        // Loop to copy the path
        for(let i = 0; i < index; i++)
        {
            mtrx[r][i] = path[i];
        }
    }
 
    // Function to store all path
    // one by one in matrix
    function storePath(node, path, index, mtrx)
    {
 
        // Base condition
        if (node == null)
        {
            return;
        }
 
        // Inserting the current node
        // into the current path
        path[index] = node.key;
 
        // Recursive call for
        // the left sub tree
        storePath(node.left, path,
                  index + 1, mtrx);
 
        // Recursive call for
        // the right sub tree
        storePath(node.right, path,
                  index + 1, mtrx);
 
        // Condition to check that current
        // node is a leaf node or not
        if (node.left == null &&
            node.right == null)
        {
 
            // Incrementation for changing
            // row
            row = row + 1;
 
            // Function call for copying
            // the path
            copyPath(path, index + 1, mtrx, row);
        }
    }
 
    // Function to calculate
    // total path
    function totalPath(node)
    {
        if (node == null)
        {
            return count;
        }
        if (node.left == null &&
            node.right == null)
        {
            return count + 1;
        }
        count = totalPath(node.left);
        return totalPath(node.right);
    }
 
    // Function for Clockwise Spiral Traversal
    // of Binary Tree
    function traverse_matrix(mtrx, height, width)
    {
        let j = 0, k1 = 0, k2 = 0;
        let k3 = height - 1;
        let k4 = width - 1;
 
        for(let round = 0; round < parseInt(height / 2, 10);
        round++)
        {
            for(j = k2; j < width; j++)
            {
 
                // Only print those values which
                // are not MAX_INTEGER
                if (mtrx[k1][j] != Number.MAX_VALUE)
                {
                    document.write(mtrx[k1][j] + " ");
                }
            }
            document.write("</br>");
 
            k2 = 0;
            k1++;
 
            for(j = k4; j >= 0; j--)
            {
 
                // Only print those values which
                // are not MAX_INTEGER
                if (mtrx[k3][j] != Number.MAX_VALUE)
                {
                    document.write(mtrx[k3][j] + " ");
                }
            }
            document.write("</br>");
 
            k4 = width - 1;
            k3--;
        }
 
        // Condition (one row may be left
        // traversing)
        // If number of rows in matrix are odd
        if (height % 2 != 0)
        {
            for(j = k2; j < width; j++)
            {
 
                // Only print those values which are
                // not MAX_INTEGER
                if (mtrx[k1][j] != Number.MAX_VALUE)
                {
                    document.write(mtrx[k1][j] + " ");
                }
            }
        }
    }
 
    // Function to print all the paths
    // in Boundary Root to Leaf
    // Path Traversal
    function PrintPath(node)
    {
 
        // Calculate the length of
        // longest path of the tree
        let max_len = lengthOfLongestPath(node);
 
        // Calculate total path
        let total_path = totalPath(node);
 
        // Array to store path
        let path = new Array(max_len);
        path.fill(0);
 
        // Use double pointer to create
        // 2D array which will contain
        // all path of the tree
        let mtrx = new Array(total_path);
 
        // Initialize complete matrix with
        // MAX INTEGER(purpose garbage)
        for(let i = 0; i < total_path; i++)
        {
            mtrx[i] = new Array(max_len);
            for(let j = 0; j < max_len; j++)
            {
                mtrx[i][j] = Number.MAX_VALUE;
            }
        }
 
        row = -1;
        storePath(node, path, 0, mtrx);
 
        // Print the circular clockwise spiral
        // traversal of the tree
        traverse_matrix(mtrx, total_path, max_len);
    }
     
    /* 10
      /  \
     13  11
        /  \
       19   23
      / \   / \
     21 29 43  15
              /
             7 */
               
    // Create Binary Tree as shown
    let root = newNode(10);
    root.left = newNode(13);
    root.right = newNode(11);
  
    root.right.left = newNode(19);
    root.right.right = newNode(23);
  
    root.right.left.left = newNode(21);
    root.right.left.right = newNode(29);
    root.right.right.left = newNode(43);
    root.right.right.right = newNode(15);
    root.right.right.right.left = newNode(7);
  
    // Function Call
    PrintPath(root);
 
</script>
Producción: 

10 13 
7 15 23 11 10 
10 11 19 21 
43 23 11 10 
10 11 19 29

 

Publicación traducida automáticamente

Artículo escrito por MohammadMudassir 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 *