📜  使用队列STL – SET 2在二叉树中找到最深的节点

📅  最后修改于: 2021-05-31 21:12:05             🧑  作者: Mango

给定一棵二叉树。任务是在给定的二叉树中找到最深节点的值。
例子:

Input: Root of below tree
            1
          /   \
         2      3
        / \    / \ 
       4   5  6   7
                   \
                    8
Output: 8

Input: Root of below tree
            1
          /   \
         2      3
               / 
              6  
Output: 6

方法:在本文中,我们已经讨论了在二叉树中找到最深节点的两种不同方法。在这里,我们将使用队列数据结构找到树中最深的节点。我们将首先将根推入队列,然后在从队列中删除父节点后将其推入子节点。我们将继续此过程,直到队列为空。队列中的最后一个节点是二叉树的最深节点。

下面是上述方法的实现:

C++
// C++ program to find the value of the
// deepest node in a given binary tree.
#include 
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;
}
 
// Function to find the deepest node in a tree
int findDeepest(struct Node* root) {
 
    struct Node* temp = NULL;
     
    queue  q;
 
    if(root == NULL)
        return 0;
     
    // Push the root node
    q.push(root);
 
    while(!q.empty()) {
 
        temp = q.front();
        q.pop();
         
        // Push left child
        if(temp->left)
            q.push(temp->left);
         
        // Push right child
        if(temp->right)
            q.push(temp->right);
    }
     
    // Return the deepest node's value
    return temp->data;
}
 
// Driver code
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);
     
    // Function call
    cout << findDeepest(root);
     
    return 0;
}


Java
// Java program to find the value of the
// deepest node in a given binary tree.
import java.util.*;
 
class GFG
{
 
// A tree node
static class Node
{
    int data;
    Node left , right;
};
 
// Utility function to create a new node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = temp.right = null;
    return temp;
}
 
// Function to find the deepest node in a tree
static int findDeepest(Node root)
{
    Node temp = null;
     
    Queue  q = new LinkedList();
 
    if(root == null)
        return 0;
     
    // Push the root node
    q.add(root);
 
    while(!q.isEmpty())
    {
        temp = q.peek();
        q.remove();
         
        // Push left child
        if(temp.left!=null)
            q.add(temp.left);
         
        // Push right child
        if(temp.right!=null)
            q.add(temp.right);
    }
     
    // Return the deepest node's value
    return temp.data;
}
 
// Driver code
public static void main(String[] args)
{
    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);
     
    // Function call
    System.out.println(findDeepest(root));
}
}
 
// This code is contributed by 29AjayKumar


Python3
# Python3 program to find the value of the
# deepest node in a given binary tree.
from collections import deque
 
# A tree node
class Node:
     
    def __init__(self, data):
         
        self.data = data
        self.left = None
        self.right = None
 
# Function to find the deepest node in a tree
def findDeepest(root: Node) -> int:
 
    temp = None
    q = deque()
 
    if (root == None):
        return 0
 
    # Push the root node
    q.append(root)
 
    while q:
        temp = q[0]
        q.popleft()
 
        # Push left child
        if (temp.left):
            q.append(temp.left)
 
        # Append right child
        if (temp.right):
            q.append(temp.right)
 
    # Return the deepest node's value
    return temp.data
 
# Driver code
if __name__ == "__main__":
 
    root = Node(1)
    root.left = Node(2)
    root.right = Node(3)
    root.left.left = Node(4)
    root.right.left = Node(5)
    root.right.right = Node(6)
    root.right.left.right = Node(7)
    root.right.right.right = Node(8)
    root.right.left.right.left = Node(9)
 
    # Function call
    print(findDeepest(root))
 
# This code is contributed by sanjeev2552


C#
// C# program to find the value of the
// deepest node in a given binary tree.
using System;
using System.Collections.Generic;
 
class GFG
{
 
// A tree node
public class Node
{
    public int data;
    public Node left , right;
};
 
// Utility function to create a new node
static Node newNode(int data)
{
    Node temp = new Node();
    temp.data = data;
    temp.left = temp.right = null;
    return temp;
}
 
// Function to find the deepest node in a tree
static int findDeepest(Node root)
{
    Node temp = null;
     
    Queue  q = new Queue ();
 
    if(root == null)
        return 0;
     
    // Push the root node
    q.Enqueue(root);
 
    while(q.Count != 0)
    {
        temp = q.Peek();
        q.Dequeue();
         
        // Push left child
        if(temp.left != null)
            q.Enqueue(temp.left);
         
        // Push right child
        if(temp.right != null)
            q.Enqueue(temp.right);
    }
     
    // Return the deepest node's value
    return temp.data;
}
 
// Driver code
public static void Main(String[] args)
{
    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);
     
    // Function call
    Console.WriteLine(findDeepest(root));
}
}
     
// This code is contributed by PrinciRaj1992


输出:

9

时间复杂度: O(N)

想要从精选的最佳视频中学习并解决问题,请查看有关从基础到高级C++的C++基础课程以及有关语言和STL的C++ STL课程。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”