📌  相关文章
📜  在二叉树的前序遍历中找到第 n 个节点

📅  最后修改于: 2022-05-13 01:57:20.106000             🧑  作者: Mango

在二叉树的前序遍历中找到第 n 个节点

给定一棵二叉树和一个数 N,编写程序在给定二叉树的前序遍历中找到第 N 个节点。
先决条件:树遍历
例子:

Input:      N = 4
              11
            /   \
           21    31
         /   \
        41     51
Output: 51
Explanation: Preorder Traversal of given Binary Tree is 11 21 41 51 31, 
so 4th node will be 51.

Input:      N = 5
             25
           /    \
          20    30
        /    \ /   \
      18    22 24   32
Output: 30

解决这个问题的想法是对给定的二叉树进行前序遍历,并跟踪遍历树时访问的节点的计数,并在计数等于 N 时打印当前节点。

C++
// C++ program to find n-th node of
// Preorder Traversal of Binary Tree
#include 
using namespace std;
 
// Tree node
struct Node {
    int data;
    Node *left, *right;
};
 
// function to create new node
struct Node* createNode(int item)
{
    Node* temp = new Node;
    temp->data = item;
    temp->left = NULL;
    temp->right = NULL;
 
    return temp;
}
 
// function to find the N-th node in the preorder
// traversal of a given binary tree
void NthPreordernode(struct Node* root, int N)
{
    static int flag = 0;
 
    if (root == NULL)
        return;
 
    if (flag <= N) {
        flag++;
 
        // prints the n-th node of preorder traversal
        if (flag == N)
            cout << root->data;
 
        // left recursion
        NthPreordernode(root->left, N);
 
        // right recursion
        NthPreordernode(root->right, N);
    }
}
 
// Driver code
int main()
{
    // construction of binary tree
    struct Node* root = createNode(25);
    root->left = createNode(20);
    root->right = createNode(30);
    root->left->left = createNode(18);
    root->left->right = createNode(22);
    root->right->left = createNode(24);
    root->right->right = createNode(32);
 
    // nth node
    int N = 6;
 
    // prints n-th found found
    NthPreordernode(root, N);
 
    return 0;
}


Java
// Java program to find n-th node of
// Preorder Traversal of Binary Tree
class GFG
{
 
// Tree node
static class Node
{
    int data;
    Node left, right;
};
 
// function to create new node
static Node createNode(int item)
{
    Node temp = new Node();
    temp.data = item;
    temp.left = null;
    temp.right = null;
 
    return temp;
}
static int flag = 0;
 
// function to find the N-th node in the preorder
// traversal of a given binary tree
static void NthPreordernode(Node root, int N)
{
     
 
    if (root == null)
        return;
 
    if (flag <= N)
    {
        flag++;
 
        // prints the n-th node of preorder traversal
        if (flag == N)
            System.out.print( root.data);
 
        // left recursion
        NthPreordernode(root.left, N);
 
        // right recursion
        NthPreordernode(root.right, N);
    }
}
 
// Driver code
public static void main(String args[])
{
    // construction of binary tree
    Node root = createNode(25);
    root.left = createNode(20);
    root.right = createNode(30);
    root.left.left = createNode(18);
    root.left.right = createNode(22);
    root.right.left = createNode(24);
    root.right.right = createNode(32);
 
    // nth node
    int N = 6;
 
    // prints n-th found found
    NthPreordernode(root, N);
}
}
 
// This code contributed by Arnab Kundu


Python3
# Python program to find n-th node of
# Preorder Traversal of Binary Tree
 
class createNode():
 
    def __init__(self, data):
        self.data = data
        self.left = None
        self.right = None
         
         
# function to find the N-th node in the preorder
# traversal of a given binary tree
flag = [0]
def NthPreordernode(root, N):
    if (root == None):
        return
 
    if (flag[0] <= N):
        flag[0] += 1
 
        # prints the n-th node of preorder traversal
        if (flag[0] == N):
            print(root.data)
 
        # left recursion
        NthPreordernode(root.left, N)
 
        # right recursion
        NthPreordernode(root.right, N)
         
# Driver code
if __name__ == '__main__':
     
    # construction of binary tree
    root = createNode(25)
    root.left = createNode(20)
    root.right = createNode(30)
    root.left.left = createNode(18)
    root.left.right = createNode(22)
    root.right.left = createNode(24)
    root.right.right = createNode(32)
 
    # nth node
    N = 6
 
    # prints n-th found found
    NthPreordernode(root, N)
 
# This code is contributed by SHUBHAMSINGH10


C#
// C# program to find n-th node of
// Preorder Traversal of Binary Tree
using System;
     
class GFG
{
 
// Tree node
public class Node
{
    public int data;
    public Node left, right;
};
 
// function to create new node
static Node createNode(int item)
{
    Node temp = new Node();
    temp.data = item;
    temp.left = null;
    temp.right = null;
 
    return temp;
}
static int flag = 0;
 
// function to find the N-th node in the preorder
// traversal of a given binary tree
static void NthPreordernode(Node root, int N)
{
     
 
    if (root == null)
        return;
 
    if (flag <= N)
    {
        flag++;
 
        // prints the n-th node of preorder traversal
        if (flag == N)
            Console.Write( root.data);
 
        // left recursion
        NthPreordernode(root.left, N);
 
        // right recursion
        NthPreordernode(root.right, N);
    }
}
 
// Driver code
public static void Main(String []args)
{
    // construction of binary tree
    Node root = createNode(25);
    root.left = createNode(20);
    root.right = createNode(30);
    root.left.left = createNode(18);
    root.left.right = createNode(22);
    root.right.left = createNode(24);
    root.right.right = createNode(32);
 
    // nth node
    int N = 6;
 
    // prints n-th found found
    NthPreordernode(root, N);
}
}
 
// This code is contributed by Rajput-Ji


Javascript


输出:
24

时间复杂度: O(n),其中 n 是给定二叉树中的节点数。
辅助空间: O(1)