ภาพรวมปัญหา
ได้รับ Binary Tree และ N หาโหนดที่ N ใน Preorder Traversal (Root, Left, Right)
ตัวอย่าง
อินพุต
N = 6

เอาต์พุต
6
คำอธิบาย
Preorder: 1, 2, 4, 5, 3, 6, 7 ตัวที่ 6 = 6
วิธีแก้ปัญหา
Preorder Traversal แบบ Recursive: เยี่ยม Root ก่อน แล้ว Left แล้ว Right
โค้ดตัวอย่าง
#include <iostream>
using namespace std;
struct Node {
int data;
Node *left, *right;
};
Node* createNode(int item) {
Node* temp = new Node;
temp->data = item;
temp->left = temp->right = NULL;
return temp;
}
void findPreOrderTraversalRec(Node* root, int N) {
static int nodeCount = 0;
if (root == NULL) return;
if (nodeCount <= N) {
nodeCount++;
if (nodeCount == N)
cout << root->data;
findPreOrderTraversalRec(root->left, N);
findPreOrderTraversalRec(root->right, N);
}
}
int main() {
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 preorder traversal is ";
findPreOrderTraversalRec(root, N);
return 0;
}
เอาต์พุต
6th node in preorder traversal is 6
สรุป
Preorder: Root → Left → Right ใช้ static counter นับลำดับ