-
題目連結
-
解題思路:
- 對於這類遞迴問題,採用「宏觀」思考模式。
- 對於任意一個節點A,左子樹先「展開為連結串列」,右子樹再「展開為連結串列」,然後A節點,將左子樹的結果,和右子樹的結果,「串在一起」即可。
- 左子樹展開為連結串列,所以要返回兩個節點,一個是連結串列的頭,然後是連結串列的尾。
-
程式碼
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: // 將head展開成連結串列 pair<TreeNode*, TreeNode*> process(TreeNode *head) { if (head == nullptr) { return {nullptr, nullptr}; } TreeNode *left_head = nullptr; // 左連結串列的頭 TreeNode *left_tail = nullptr; // 左連結串列的尾 TreeNode *right_head = nullptr; // 右連結串列的頭 TreeNode *right_tail = nullptr; // 右連結串列的尾 auto left_res = process(head->left); auto right_res = process(head->right); left_head = left_res.first; left_tail = left_res.second; right_head = right_res.first; right_tail = right_res.second; TreeNode *cur_head = head; TreeNode *cur_tail = head; if (left_head != nullptr) { cur_tail->right = left_head; cur_tail = left_tail; head->left = nullptr; // 不要忘記這一句 } if (right_head != nullptr) { cur_tail->right = right_head; cur_tail = right_tail; } return {cur_head, cur_tail}; } void flatten(TreeNode* root) { process(root); } };
114. 二叉樹展開為連結串列
相關文章
- 二叉樹展開為連結串列二叉樹
- LeetCode-114-二叉樹展開為連結串列LeetCode二叉樹
- 二叉連結串列儲存結構、二叉樹相關操作二叉樹
- Hash連結串列轉換為紅黑樹,和樹轉換為連結串列的條件
- 【連結串列問題】打卡10:將搜尋二叉樹轉換成雙向連結串列二叉樹
- LeetCode 109——有序連結串列轉化二叉搜尋樹LeetCode
- LeetCode-109-有序連結串列轉換二叉搜尋樹LeetCode
- LeetCode系列之「有序連結串列轉換二叉搜尋樹」LeetCode
- JZ-026-二叉搜尋樹與雙向連結串列
- 反轉連結串列、合併連結串列、樹的子結構
- [LeetCode] 1367. Linked List in Binary Tree 二叉樹中的連結串列LeetCode二叉樹
- 面試題36:二叉搜尋樹與雙向連結串列面試題
- 連結串列,樹,順序表操縱
- 466. 使用快慢指標把有序連結串列轉換二叉搜尋樹指標
- 請判斷一個連結串列是否為迴文連結串列。
- 連結串列-迴圈連結串列
- 連結串列-雙向連結串列
- 連結串列 - 單向連結串列
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- 連結串列-雙向通用連結串列
- 如何以及為什麼React Fiber使用連結串列遍歷元件樹React元件
- 【JavaScript】前端演算法題(重建二叉樹、反向輸出連結串列每個節點)JavaScript前端演算法二叉樹
- 連結串列-雙向非通用連結串列
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- 連結串列入門與插入連結串列
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode二叉樹#17】在二叉搜尋樹中插入或刪除某個值(涉及重構二叉樹、連結串列基礎、以及記憶體洩漏問題)LeetCode二叉樹記憶體
- 資料結構-單連結串列、雙連結串列資料結構
- 連結串列
- LeetCode刷題記63-109. 有序連結串列轉換二叉搜尋樹【檢視解法】LeetCode
- 「譯」如何以及為什麼 React Fiber 使用連結串列遍歷元件樹React元件
- LeetCode-Python-86. 分隔連結串列(連結串列)LeetCodePython
- 判斷是否為環形連結串列
- 根據一個輸入資料構造二叉樹和連結串列資料結構的方法(c++)二叉樹資料結構C++
- 揭開連結串列的真面目
- 單連結串列建立連結串列出現問題
- 單連結串列的逆序輸出 PTA6-1 單連結串列逆轉 為例