Giới thiệu
Cho cây nhị phân và số nguyên N. Tìm nút thứ N trong thứ tự duyệt postorder (trái - phải - gốc).
Ví dụ minh họa
Đầu vào
N = 6

Đầu ra
3
Giải thích
Postorder: 4, 5, 2, 6, 7, 3, 1 → phần tử thứ 6 là 3
Phương pháp giải: Đệ quy postorder với bộ đếm
Duyệt postorder đệ quy: đệ quy trái, đệ quy phải, thăm gốc (tăng bộ đếm, kiểm tra N).
Chương trình minh họa
#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 findPostOrderTraversalRec(Node* root, int N) {
static int nodeCount = 0;
if (!root) return;
if (nodeCount <= N) {
findPostOrderTraversalRec(root->left, N);
findPostOrderTraversalRec(root->right, N);
nodeCount++;
if (nodeCount == N)
cout << root->data;
}
}
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 postorder traversal is ";
findPostOrderTraversalRec(root, N);
return 0;
}
Đầu ra
6th node in postorder traversal is 3
Lưu ý: Code mẫu trong nội dung gốc bị nhầm lẫn hoàn toàn (code bài toán fortunate number).