Penggunaan rekursi yang hebat dalam struktur data C++: pelaksanaan tindanan dan pokok

WBOY
Lepaskan: 2024-05-04 13:54:01
asal
1006 orang telah melayarinya

Aplikasi rekursi dalam struktur data C++: Tindanan: Tindanan dilaksanakan secara rekursif melalui struktur masuk-dahulu-keluar (LIFO). Pokok: Pokok dilaksanakan secara rekursif melalui struktur hierarki, menyokong operasi seperti sisipan dan pengiraan kedalaman. Rekursi menyediakan penyelesaian yang ringkas dan cekap untuk memproses struktur bersarang, menjadikan pelaksanaan struktur data lebih intuitif dan lebih mudah untuk diselenggara.

递归在 C++ 数据结构中的妙用:栈和树的实现

Penggunaan rekursi dalam struktur data C++: pelaksanaan tindanan dan pokok

Rekursi ialah teknik pengaturcaraan yang berkuasa yang membolehkan fungsi memanggil diri mereka sendiri untuk menyelesaikan masalah. Rekursi sangat berguna dalam pelaksanaan struktur data, terutamanya untuk memproses struktur pokok dan struktur linear.

Pelaksanaan rekursif timbunan

Timbunan ialah struktur data masuk-dahulu-keluar (LIFO). Kita boleh menggunakan rekursi untuk melaksanakan tindanan, seperti yang ditunjukkan di bawah:

struct Node {
  int data;
  Node* next;
};

class Stack {
private:
  Node* head;

public:
  void push(int data) {
    head = new Node{data, head};
  }

  int pop() {
    if (head == nullptr) {
      throw exception("Stack is empty");
    }
    int data = head->data;
    head = head->next;
    return data;
  }

  bool empty() {
    return head == nullptr;
  }
};
Salin selepas log masuk

Kes praktikal: mencetak senarai terpaut dalam susunan terbalik

void printLinkedListInReverseOrder(Node* head) {
  if (head == nullptr) {
    return;
  }

  printLinkedListInReverseOrder(head->next);
  cout << head->data << " ";
}
Salin selepas log masuk

Pelaksanaan rekursif pokok

Tree ialah struktur data hierarki. Kita boleh menggunakan rekursi untuk melaksanakan pokok, seperti yang ditunjukkan di bawah:

struct Node {
  int data;
  vector<Node*> children;
};

class Tree {
private:
  Node* root;

public:
  void insert(int data) {
    if (root == nullptr) {
      root = new Node{data, {}};
    } else {
      insertHelper(root, data);
    }
  }

private:
  void insertHelper(Node* node, int data) {
    for (auto& child : node->children) {
      if (child == nullptr) {
        child = new Node{data, {}};
        return;
      }
    }

    node->children.push_back(new Node{data, {}});
  }

  void printTree() {
    printTreeHelper(root);
  }

private:
  void printTreeHelper(Node* node) {
    cout << node->data << " ";
    for (auto& child : node->children) {
      printTreeHelper(child);
    }
  }
};
Salin selepas log masuk

Kes praktikal: Mengira kedalaman pokok binari

int calculateTreeDepth(Node* root) {
  if (root == nullptr) {
    return 0;
  }

  int maxDepth = 0;
  for (auto& child : root->children) {
    maxDepth = max(maxDepth, calculateTreeDepth(child));
  }

  return maxDepth + 1;
}
Salin selepas log masuk

Melalui rekursi, kami boleh melaksanakan struktur data utama seperti tindanan dan pokok dengan ringkas dan cekap. Rekursi menyediakan alatan berkuasa untuk memproses struktur bersarang yang kompleks, menjadikan pelaksanaan struktur data lebih intuitif dan lebih mudah untuk diselenggara.

Atas ialah kandungan terperinci Penggunaan rekursi yang hebat dalam struktur data C++: pelaksanaan tindanan dan pokok. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!