Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Tìm nút thứ N trong duyệt postorder của cây nhị phân trong C++

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

Tìm nút thứ N trong duyệt postorder của cây nhị phân trong C++

Đầ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).