给定一棵二叉树。任务是在给定的二叉树中找到最深节点的值。
例子:
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等的更多准备工作,请参阅“完整面试准备课程” 。