Encuentra el Node más profundo en un árbol binario

Dado un árbol binario, encuentre el Node más profundo en él.

Ejemplos: 

C++

// A C++ program to find value of the deepest node
// in a given binary tree
#include <bits/stdc++.h>
using namespace std;
 
// A tree node
struct Node
{
    int data;
    struct Node *left, *right;
};
 
// Utility function to create a new node
Node *newNode(int data)
{
    Node *temp = new Node;
    temp->data = data;
    temp->left = temp->right = NULL;
    return temp;
}
 
// maxLevel : keeps track of maximum level seen so far.
// res :  Value of deepest node so far.
// level : Level of root
void find(Node *root, int level, int &maxLevel, int &res)
{
    if (root != NULL)
    {
        find(root->left, ++level, maxLevel, res);
 
        // Update level and rescue
        if (level > maxLevel)
        {
            res = root->data;
            maxLevel = level;
        }
 
        find(root->right, level, maxLevel, res);
    }
}
 
// Returns value of deepest node
int deepestNode(Node *root)
{
    // Initialize result and max level
    int res = -1;
    int maxLevel = -1;
 
    // Updates value "res" and "maxLevel"
    // Note that res and maxLen are passed
    // by reference.
    find(root, 0, maxLevel, res);
    return res;
}
 
// Driver program
int main()
{
    Node* root = newNode(1);
    root->left = newNode(2);
    root->right = newNode(3);
    root->left->left = newNode(4);
    root->right->left = newNode(5);
    root->right->right = newNode(6);
    root->right->left->right = newNode(7);
    root->right->right->right = newNode(8);
    root->right->left->right->left = newNode(9);
    cout << deepestNode(root);
    return 0;
}

Java

// Java program to find value of the deepest node
// in a given binary tree
class GFG
{
 
    // A tree node
    static class Node
    {
 
        int data;
        Node left, right;
 
        Node(int key)
        {
            data = key;
            left = null;
            right = null;
        }
    }
    static int maxLevel = -1;
    static int res = -1;
 
    // maxLevel : keeps track of maximum level seen so far.
    // res : Value of deepest node so far.
    // level : Level of root
    static void find(Node root, int level)
    {
        if (root != null)
        {
            find(root.left, ++level);
 
            // Update level and rescue
            if (level > maxLevel)
            {
                res = root.data;
                maxLevel = level;
            }
 
            find(root.right, level);
        }
    }
 
    // Returns value of deepest node
    static int deepestNode(Node root)
    {
        // Initialize result and max level
        /* int res = -1;
        int maxLevel = -1; */
 
        // Updates value "res" and "maxLevel"
        // Note that res and maxLen are passed
        // by reference.
        find(root, 0);
        return res;
    }
 
    // Driver code
    public static void main(String[] args)
    {
 
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.right.left = new Node(5);
        root.right.right = new Node(6);
        root.right.left.right = new Node(7);
        root.right.right.right = new Node(8);
        root.right.left.right.left = new Node(9);
        System.out.println(deepestNode(root));
    }
}
 
// This code is contributed by Princi Singh

Python3

"""Python3 program to find value of the
deepest node in a given binary tree"""
 
# A Binary Tree Node
# Utility function to create a
# new tree node
class newNode:
 
    # Constructor to create a newNode
    def __init__(self, data):
        self.data= data
        self.left = None
        self.right = None
        self.visited = False
 
# maxLevel : keeps track of maximum
# level seen so far.
# res : Value of deepest node so far.
# level : Level of root
def find(root, level, maxLevel, res):
 
    if (root != None):
        level += 1
        find(root.left, level, maxLevel, res)
 
        # Update level and rescue
        if (level > maxLevel[0]):
         
            res[0] = root.data
            maxLevel[0] = level
         
        find(root.right, level, maxLevel, res)
         
# Returns value of deepest node
def deepestNode(root) :
 
    # Initialize result and max level
    res = [-1]
    maxLevel = [-1]
 
    # Updates value "res" and "maxLevel"
    # Note that res and maxLen are passed
    # by reference.
    find(root, 0, maxLevel, res)
    return res[0]
                         
# Driver Code
if __name__ == '__main__':
    root = newNode(1)
    root.left = newNode(2)
    root.right = newNode(3)
    root.left.left = newNode(4)
    root.right.left = newNode(5)
    root.right.right = newNode(6)
    root.right.left.right = newNode(7)
    root.right.right.right = newNode(8)
    root.right.left.right.left = newNode(9)
    print(deepestNode(root))
 
# This code is contributed by
# SHUBHAMSINGH10

C#

// C# program to find value of the deepest node
// in a given binary tree
using System;
     
class GFG
{
 
    // A tree node
    public class Node
    {
 
        public int data;
        public Node left, right;
 
        public Node(int key)
        {
            data = key;
            left = null;
            right = null;
        }
    }
    static int maxLevel = -1;
    static int res = -1;
 
    // maxLevel : keeps track of maximum level seen so far.
    // res : Value of deepest node so far.
    // level : Level of root
    static void find(Node root, int level)
    {
        if (root != null)
        {
            find(root.left, ++level);
 
            // Update level and rescue
            if (level > maxLevel)
            {
                res = root.data;
                maxLevel = level;
            }
 
            find(root.right, level);
        }
    }
 
    // Returns value of deepest node
    static int deepestNode(Node root)
    {
        // Initialize result and max level
        /* int res = -1;
        int maxLevel = -1; */
 
        // Updates value "res" and "maxLevel"
        // Note that res and maxLen are passed
        // by reference.
        find(root, 0);
        return res;
    }
 
    // Driver code
    public static void Main(String[] args)
    {
 
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.right.left = new Node(5);
        root.right.right = new Node(6);
        root.right.left.right = new Node(7);
        root.right.right.right = new Node(8);
        root.right.left.right.left = new Node(9);
        Console.WriteLine(deepestNode(root));
    }
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// JavaScript program to find value of the deepest node
// in a given binary tree
 
class Node
{
    constructor(key)
    {
        this.data = key;
            this.left = null;
            this.right = null;
    }
}
 
let maxLevel = -1;
let res = -1;
 
// maxLevel : keeps track of maximum level seen so far.
    // res : Value of deepest node so far.
    // level : Level of root
function find(root,level)
{
    if (root != null)
        {
            find(root.left, ++level);
  
            // Update level and rescue
            if (level > maxLevel)
            {
                res = root.data;
                maxLevel = level;
            }
  
            find(root.right, level);
        }
}
 
// Returns value of deepest node
function deepestNode(root)
{
    // Initialize result and max level
        /* int res = -1;
        int maxLevel = -1; */
  
        // Updates value "res" and "maxLevel"
        // Note that res and maxLen are passed
        // by reference.
        find(root, 0);
        return res;
}
 
// Driver code
let root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.right.left = new Node(5);
root.right.right = new Node(6);
root.right.left.right = new Node(7);
root.right.right.right = new Node(8);
root.right.left.right.left = new Node(9);
document.write(deepestNode(root));
 
 
// This code is contributed by rag2127
 
</script>

C++

// A C++ program to find value of the
// deepest node in a given binary tree
#include <bits/stdc++.h>
using namespace std;
 
// A tree node with constructor
class Node
{
public:
    int data;
    Node *left, *right;
     
    // constructor   
    Node(int key)
    {
        data = key;
        left = NULL;
        right = NULL;
    }
};
 
// Utility function to find height
// of a tree, rooted at 'root'.
int height(Node* root)
{
  if(!root) return 0;
   
  int leftHt = height(root->left);
  int rightHt = height(root->right);
   
  return max(leftHt, rightHt) + 1;
}
 
// levels : current Level
// Utility function to print all
// nodes at a given level.
void deepestNode(Node* root, int levels)
{
    if(!root) return;
     
    if(levels == 1)
    cout << root->data;
     
    else if(levels > 1)
    {
        deepestNode(root->left, levels - 1);
        deepestNode(root->right, levels - 1);
    }
}
 
// Driver program
int main()
{
    Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->right->left = new Node(5);
    root->right->right = new Node(6);
    root->right->left->right = new Node(7);
    root->right->right->right = new Node(8);
    root->right->left->right->left = new Node(9);
     
    // Calculating height of tree
    int levels = height(root);
     
    // Printing the deepest node
    deepestNode(root, levels);
     
    return 0;
}
 
// This code is contributed by decode2207.

Java

// A Java program to find value of the
// deepest node in a given binary tree
class GFG
{
     
// A tree node with constructor
static class Node
{
    int data;
    Node left, right;
     
    // constructor
    Node(int key)
    {
        data = key;
        left = null;
        right = null;
    }
};
 
// Utility function to find height
// of a tree, rooted at 'root'.
static int height(Node root)
{
    if(root == null) return 0;
         
    int leftHt = height(root.left);
    int rightHt = height(root.right);
         
    return Math.max(leftHt, rightHt) + 1;
}
 
// levels : current Level
// Utility function to print all
// nodes at a given level.
static void deepestNode(Node root,
                        int levels)
{
    if(root == null) return;
     
    if(levels == 1)
    System.out.print(root.data + " ");
     
    else if(levels > 1)
    {
        deepestNode(root.left, levels - 1);
        deepestNode(root.right, levels - 1);
    }
}
 
// Driver Codede
public static void main(String args[])
{
    Node root = new Node(1);
    root.left = new Node(2);
    root.right = new Node(3);
    root.left.left = new Node(4);
    root.right.left = new Node(5);
    root.right.right = new Node(6);
    root.right.left.right = new Node(7);
    root.right.right.right = new Node(8);
    root.right.left.right.left = new Node(9);
     
    // Calculating height of tree
    int levels = height(root);
     
    // Printing the deepest node
    deepestNode(root, levels);
}
}
 
// This code is contributed by Arnab Kundu

Python3

# A Python3 program to find value of the
# deepest node in a given binary tree
class new_Node:
    def __init__(self, key):
        self.data = key
        self.left = self.right = None
         
# Utility function to find height
# of a tree, rooted at 'root'.
def height(root):
    if(not root):
        return 0
     
    leftHt = height(root.left)
    rightHt = height(root.right)
     
    return max(leftHt, rightHt) + 1
 
# levels : current Level
# Utility function to print all
# nodes at a given level.
def deepestNode(root, levels):
    if(not root):
        return
     
    if(levels == 1):
        print(root.data)
    elif(levels > 1):
        deepestNode(root.left, levels - 1)
        deepestNode(root.right, levels - 1)
 
# Driver Code
if __name__ == '__main__':
 
    root = new_Node(1)
    root.left = new_Node(2)
    root.right = new_Node(3)
    root.left.left = new_Node(4)
    root.right.left = new_Node(5)
    root.right.right = new_Node(6)
    root.right.left.right = new_Node(7)
    root.right.right.right = new_Node(8)
    root.right.left.right.left = new_Node(9)
     
    # Calculating height of tree
    levels = height(root)
     
    # Printing the deepest node
    deepestNode(root, levels)
 
# This code is contributed by PranchalK

C#

// C# program to find value of the
// deepest node in a given binary tree
using System;
     
class GFG
{
     
// A tree node with constructor
public class Node
{
    public int data;
    public Node left, right;
     
    // constructor
    public Node(int key)
    {
        data = key;
        left = null;
        right = null;
    }
};
 
// Utility function to find height
// of a tree, rooted at 'root'.
static int height(Node root)
{
    if(root == null) return 0;
         
    int leftHt = height(root.left);
    int rightHt = height(root.right);
         
    return Math.Max(leftHt, rightHt) + 1;
}
 
// levels : current Level
// Utility function to print all
// nodes at a given level.
static void deepestNode(Node root,
                        int levels)
{
    if(root == null) return;
     
    if(levels == 1)
    Console.Write(root.data + " ");
     
    else if(levels > 1)
    {
        deepestNode(root.left, levels - 1);
        deepestNode(root.right, levels - 1);
    }
}
 
// Driver Code
public static void Main(String []args)
{
    Node root = new Node(1);
    root.left = new Node(2);
    root.right = new Node(3);
    root.left.left = new Node(4);
    root.right.left = new Node(5);
    root.right.right = new Node(6);
    root.right.left.right = new Node(7);
    root.right.right.right = new Node(8);
    root.right.left.right.left = new Node(9);
     
    // Calculating height of tree
    int levels = height(root);
     
    // Printing the deepest node
    deepestNode(root, levels);
}
}
 
/* This code contributed by PrinciRaj1992 */

Javascript

<script>
// A Javascript program to find value of the
// deepest node in a given binary tree
 
// A tree node with constructor
class Node
{
    // constructor
    constructor(key)
    {
        this.data = key;
        this.left = null;
        this.right = null;
    }
}
 
// Utility function to find height
// of a tree, rooted at 'root
function height(root)
{
    if(root == null) return 0;
          
    let leftHt = height(root.left);
    let rightHt = height(root.right);
          
    return Math.max(leftHt, rightHt) + 1;
}
 
// levels : current Level
// Utility function to print all
// nodes at a given level.
function deepestNode(root,levels)
{
    if(root == null) return;
      
    if(levels == 1)
    document.write(root.data + " ");
      
    else if(levels > 1)
    {
        deepestNode(root.left, levels - 1);
        deepestNode(root.right, levels - 1);
    }
}
 
// Driver Codede
let root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.right.left = new Node(5);
root.right.right = new Node(6);
root.right.left.right = new Node(7);
root.right.right.right = new Node(8);
root.right.left.right.left = new Node(9);
 
// Calculating height of tree
let levels = height(root);
 
// Printing the deepest node
deepestNode(root, levels);
 
 
 
// This code is contributed by avanitrachhadiya2155
</script>

C++

// A C++ program to find value of the
// deepest node in a given binary tree
#include <bits/stdc++.h>
using namespace std;
 
// A tree node with constructor
class Node
{
public:
    int data;
    Node *left, *right;
      
    // constructor  
    Node(int key)
    {
        data = key;
        left = NULL;
        right = NULL;
    }
};
 
// Function to return the deepest node
Node* deepestNode(Node* root)
{
    Node* tmp = NULL;
    if (root == NULL)
        return NULL;
 
    // Creating a Queue
    queue<Node*> q;
    q.push(root);
 
    // Iterates until queue become empty
    while (q.size() > 0)
    {
        tmp = q.front();
        q.pop();
        if (tmp->left != NULL)
            q.push(tmp->left);
        if (tmp->right != NULL)
            q.push(tmp->right);
    }
    return tmp;
}
     
int main()
{
    Node* root = new Node(1);
    root->left = new Node(2);
    root->right = new Node(3);
    root->left->left = new Node(4);
    root->right->left = new Node(5);
    root->right->right = new Node(6);
    root->right->left->right = new Node(7);
    root->right->right->right = new Node(8);
    root->right->left->right->left = new Node(9);
 
    Node* deepNode = deepestNode(root);
    cout << (deepNode->data);
 
    return 0;
}

Java

import java.util.*;
 
// A Java program to find value of the
// deepest node in a given binary tree
 
// A tree node with constructor
public class Node
{
    int data;
    Node left, right;
 
    // constructor
    Node(int key)
    {
        data = key;
        left = null;
        right = null;
    }
};
 
class Gfg
{
   
    // Function to return the deepest node
    public static Node deepestNode(Node root)
    {
        Node tmp = null;
        if (root == null)
            return null;
 
        // Creating a Queue
        Queue<Node> q = new LinkedList<Node>();
        q.offer(root);
 
        // Iterates until queue become empty
        while (!q.isEmpty())
        {
            tmp = q.poll();
            if (tmp.left != null)
                q.offer(tmp.left);
            if (tmp.right != null)
                q.offer(tmp.right);
        }
        return tmp;
    }
 
    public static void main(String[] args)
    {
 
        Node root = new Node(1);
        root.left = new Node(2);
        root.right = new Node(3);
        root.left.left = new Node(4);
        root.right.left = new Node(5);
        root.right.right = new Node(6);
        root.right.left.right = new Node(7);
        root.right.right.right = new Node(8);
        root.right.left.right.left = new Node(9);
 
        Node deepNode = deepestNode(root);
        System.out.println(deepNode.data);
    }
}
 
// Code is contributed by mahi_07

Python3

# A Python3 program to find value of the
# deepest node in a given binary tree by method 3
from collections import deque
 
class new_Node:
    def __init__(self, key):
        self.data = key
        self.left = self.right = None
 
def deepestNode(root):
    if root == None:
        return 0
    q = deque()
    q.append(root)
    node = None
    while len(q) != 0:
        node = q.popleft()
        if node.left is not None:
            q.append(node.left)
        if node.right is not None:
            q.append(node.right)
    return node.data
  
# Driver Code
if __name__ == '__main__':
  
    root = new_Node(1)
    root.left = new_Node(2)
    root.right = new_Node(3)
    root.left.left = new_Node(4)
    root.right.left = new_Node(5)
    root.right.right = new_Node(6)
    root.right.left.right = new_Node(7)
    root.right.right.right = new_Node(8)
    root.right.left.right.left = new_Node(9)
      
    # Calculating height of tree
    levels = deepestNode(root)
      
    # Printing the deepest node
    print(levels)
     
# This code is contributed by Aprajita Chhawi

C#

// A C# program to find value of the
// deepest node in a given binary tree
using System;
using System.Collections.Generic;
 
// A tree node with constructor
public class Node
{
  public
    int data;
  public
    Node left, right;
 
  // constructor
  public
    Node(int key)
  {
    data = key;
    left = null;
    right = null;
  }
};
 
class Gfg
{
 
  // Function to return the deepest node
  public static Node deepestNode(Node root)
  {
    Node tmp = null;
    if (root == null)
      return null;
 
    // Creating a Queue
    Queue<Node> q = new Queue<Node>();
    q.Enqueue(root);
 
    // Iterates until queue become empty
    while (q.Count != 0)
    {
      tmp = q.Peek();
      q.Dequeue();
      if (tmp.left != null)
        q.Enqueue(tmp.left);
      if (tmp.right != null)
        q.Enqueue(tmp.right);
    }
    return tmp;
  }
 
  // Driver code
  public static void Main(String[] args)
  {
 
    Node root = new Node(1);
    root.left = new Node(2);
    root.right = new Node(3);
    root.left.left = new Node(4);
    root.right.left = new Node(5);
    root.right.right = new Node(6);
    root.right.left.right = new Node(7);
    root.right.right.right = new Node(8);
    root.right.left.right.left = new Node(9);
 
    Node deepNode = deepestNode(root);
    Console.WriteLine(deepNode.data);
  }
}
 
// This code is contributed by gauravrajput1

Javascript

<script>
// A Javascript program to find value of the
// deepest node in a given binary tree
  
// A tree node with constructor
class Node
{
    constructor(key)
    {
        this.data = key;
        this.left = null;
        this.right = null;
    }
}
 
// Function to return the deepest node
function deepestNode(root)
{
    let  tmp = null;
        if (root == null)
            return null;
  
        // Creating a Queue
        let q = [];
        q.push(root);
  
        // Iterates until queue become empty
        while (q.length!=0)
        {
            tmp = q.shift();
            if (tmp.left != null)
                q.push(tmp.left);
            if (tmp.right != null)
                q.push(tmp.right);
        }
        return tmp;
}
 
let root = new Node(1);
root.left = new Node(2);
root.right = new Node(3);
root.left.left = new Node(4);
root.right.left = new Node(5);
root.right.right = new Node(6);
root.right.left.right = new Node(7);
root.right.right.right = new Node(8);
root.right.left.right.left = new Node(9);
 
let deepNode = deepestNode(root);
document.write(deepNode.data);
 
// This code is contributed by unknown2108
</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 *