Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

หาโหนดที่ N ใน Inorder Traversal ของ Binary Tree ด้วย C++


ภาพรวมปัญหา

ได้รับ Binary Tree และ N หาโหนดที่ N ใน Inorder Traversal (Left, Root, Right)

ตัวอย่าง

อินพุต

N = 6

หาโหนดที่ N ใน Inorder Traversal ของ Binary Tree ด้วย C++

เอาต์พุต

3

คำอธิบาย

Inorder: 4, 2, 5, 1, 6, 3, 7
ตัวที่ 6 = 3

วิธีแก้ปัญหา

Inorder Traversal แบบ Recursive นับจำนวนโหนดที่ผ่านมา

โค้ดตัวอย่าง

#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 findInOrderTraversalRec(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() {
    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

สรุป

Inorder Traversal ใช้ Recursion นับด้วย static variable Complexity O(N)