在 C++ 中構建一個來自 2D 矩陣的連結串列
假設我們有一個矩陣,我們需要使用遞迴方法將其轉換為二維連結串列。
該連結串列將具有右指標和下指標。
因此,如果輸入如下所示:
| 10 | 20 | 30 |
| 40 | 50 | 60 |
| 70 | 80 | 90 |
則輸出將是

要解決此問題,我們將遵循以下步驟:
定義函式 make_2d_list(),它將採用矩陣 mat、i、j、m、n,
如果 i 和 j 不是矩陣邊界,則:
返回 null
temp := 建立一個值為 mat[i, j] 的新節點
temp 的右側 := make_2d_list(mat, i, j + 1, m, n)
temp 的下方 := make_2d_list(mat, i + 1, j, m, n)
返回 temp
示例
讓我們看看以下實現以獲得更好的理解:
#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);
}輸入
{ { 10, 20, 30 },
{ 40, 50, 60 },
{ 70, 80, 90 } }輸出
10 20 30 40 50 60 70 80 90
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP