Giả sử chúng ta có một ma trận, chúng ta phải chuyển nó thành danh sách liên kết 2d bằng cách sử dụng phương pháp đệ quy.
Danh sách sẽ có con trỏ bên phải và con trỏ xuống.
Vì vậy, nếu đầu vào giống như
10 | 20 | 30 |
40 | 50 | 60 |
70 | 80 | 90 |
thì đầu ra sẽ là
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một hàm make_2d_list (), điều này sẽ lấy mat ma trận, i, j, m, n,
-
nếu tôi và j không nằm trong ranh giới ma trận, thì -
-
trả về null
-
-
temp:=tạo một nút mới với giá trị mat [i, j]
-
quyền tạm thời:=make_2d_list (mat, i, j + 1, m, n)
-
giảm nhiệt độ:=make_2d_list (mat, i + 1, j, m, n)
-
trở lại nhiệt độ
Ví dụ
Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -
#include <bits/stdc++.h> using namespace std; class TreeNode { public: int data; TreeNode *right, *down; TreeNode(int d){ data = d; right = down = NULL; } }; void show_2d_list(TreeNode* head) { TreeNode *right_ptr, *down_ptr = head; while (down_ptr) { right_ptr = down_ptr; while (right_ptr) { cout << right_ptr->data << " "; right_ptr = right_ptr->right; } cout << endl; down_ptr = down_ptr->down; } } TreeNode* make_2d_list(int mat[][3], int i, int j, int m, int n) { if (i > n - 1 || j > m - 1) return NULL; TreeNode* temp = new TreeNode(mat[i][j]); temp->right = make_2d_list(mat, i, j + 1, m, n); temp->down = make_2d_list(mat, i + 1, j, m, n); return temp; } int main() { int m = 3, n = 3; int mat[][3] = { { 10, 20, 30 }, { 40, 50, 60 }, { 70, 80, 90 } }; TreeNode* head = make_2d_list(mat, 0, 0, m, n); show_2d_list(head); }
Đầu vào
{ { 10, 20, 30 }, { 40, 50, 60 }, { 70, 80, 90 } }
Đầu ra
10 20 30 40 50 60 70 80 90