在 C++ 中構建一個來自 2D 矩陣的連結串列


假設我們有一個矩陣,我們需要使用遞迴方法將其轉換為二維連結串列。

該連結串列將具有右指標和下指標。

因此,如果輸入如下所示:

102030
405060
708090

則輸出將是

要解決此問題,我們將遵循以下步驟:

  • 定義函式 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

更新於:2020 年 8 月 27 日

896 次瀏覽

開啟您的 職業

完成課程獲得認證

開始
廣告
© . All rights reserved.