C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で順序トラバーサルのn番目のノードを検索します


この問題では、二分木と整数Nが与えられます。タスクは、二分木を順番に走査するn番目のノードを見つけることです。

二分木には、各ノードが最大2つの子を持つことができるという特別な条件があります。

トラバーサルは、ツリーのすべてのノードにアクセスするプロセスであり、それらの値も出力する場合があります。

問題を理解するために例を見てみましょう

入力

N = 6

C++で順序トラバーサルのn番目のノードを検索します

出力

3

説明

inorder traversal of tree : 4, 2, 5, 1, 6, 3, 7

ソリューションアプローチ

アイデアは、再帰呼び出しを使用して実行されるバイナリツリーの順序どおりのトラバーサルを使用することです。各呼び出しでは、最初に左側のサブツリーに対してpreOrder()を呼び出し、ルートノードをトラバースしてからpreOrder()を呼び出します。このトラバーサル中に、ノードの数をカウントし、カウントがNであるノードを出力します。

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;
struct Node {
   int data;
   Node *left, *right;
};
struct Node* createNode(int item){
   Node* temp = new Node;
   temp->data = item;
   temp->left = NULL;
   temp->right = NULL;
   return temp;
}
void findInOrderTraversalRec(struct Node* node, int N){
   static int count = 0;
   if (node == NULL)
      return;
   if (count <= N) {
      findInOrderTraversalRec(node->left, N);
      count++;
      if (count == N)
         cout<<node->data;
      findInOrderTraversalRec(node->right, N);
   }
}
int main() {
   struct Node* root = createNode(1);
   root->left = createNode(2);
   root->right = createNode(3);
   root->left->left = createNode(4);
   root->left->right = createNode(5);
   root->right->left = createNode(6);
   root->right->right = createNode(7);
   int N = 6;
   cout<<N<<"th node in inorder traversal is ";
   findInOrderTraversalRec(root, N);
   return 0;
}

出力

6th node in inorder traversal is 3

  1. C++でのN-aryツリープレオーダートラバーサル

    n-aryツリーが1つあるとすると、そのノードのプレオーダートラバーサルを見つける必要があります。 したがって、入力が次のような場合 その場合、出力は[1,3,5,6,2,4]になります。 これを解決するには、次の手順に従います- 配列を定義します preorder()というメソッドを定義します。これはルートになります ルートがnullの場合、- 空のリストを返す ansの最後にrootの値を挿入します ルートの子配列内のすべての子iについて preorder(i) ansを返す 例 理解を深めるために、次の実装を見てみ

  2. C++で二分木の垂直方向の走査でk番目のノードを見つけます

    二分木と値Kがあるとします。タスクは、垂直方向の走査でK番目のノードを出力することです。そのようなノードが存在しない場合は、-1を返します。したがって、ツリーが以下のようになっている場合- 垂直方向の走査は-のようなものです 4 2 1 5 6 3 8 7 9 したがって、K =3の場合、結果は1になります。 アプローチは簡単です。垂直方向の走査を実行し、現在のノードがk番目のノードであるかどうかを確認し、そうである場合は戻ります。 例 #include<iostream> #include<map> #include<vector> #incl