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

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

null
Input:      N = 4              11            /              21    31         /           41     51Output: 51Explanation: 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   32Output: 30

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

C++

// C++ program to find n-th node of
// Preorder Traversal of Binary Tree
#include <bits/stdc++.h>
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

<script>
// Javascript program to find n-th node of
// Preorder Traversal of Binary Tree
// Tree node
class Node
{
constructor()
{
this .data = 0;
this .left = null ;
this .right = null ;
}
};
// function to create new node
function createNode(item)
{
var temp = new Node();
temp.data = item;
temp.left = null ;
temp.right = null ;
return temp;
}
var flag = 0;
// function to find the N-th node in the preorder
// traversal of a given binary tree
function NthPreordernode(root, N)
{
if (root == null )
return ;
if (flag <= N)
{
flag++;
// prints the n-th node of preorder traversal
if (flag == N)
document.write( root.data);
// left recursion
NthPreordernode(root.left, N);
// right recursion
NthPreordernode(root.right, N);
}
}
// Driver code
// construction of binary tree
var 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
var N = 6;
// prints n-th found found
NthPreordernode(root, N);
// This code is contributed by famously.
</script>


输出:

24

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

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享