-
題目連結
-
解題思路:
- 對於這類遞迴問題,採用「宏觀」思考模式。
- 對於任意一個節點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:將搜尋二叉樹轉換成雙向連結串列二叉樹
- 面試題36:二叉搜尋樹與雙向連結串列面試題
- 反轉連結串列、合併連結串列、樹的子結構
- LeetCode系列之「有序連結串列轉換二叉搜尋樹」LeetCode
- 將二叉排序樹BST轉換成排序的雙向連結串列排序
- 微軟面試題,將二叉排序樹轉換成雙向連結串列微軟面試題排序
- LeetCode 109——有序連結串列轉化二叉搜尋樹LeetCode
- 466. 使用快慢指標把有序連結串列轉換二叉搜尋樹指標
- LeetCode-109-有序連結串列轉換二叉搜尋樹LeetCode
- 連結串列-雙向連結串列
- 連結串列-迴圈連結串列
- 連結串列面試題(二)---連結串列逆序(連結串列反轉)面試題
- [CareerCup] 4.4 Create List at Each Depth of Binary Tree 二叉樹的各層建立連結串列二叉樹
- [LeetCode] 1367. Linked List in Binary Tree 二叉樹中的連結串列LeetCode二叉樹
- 連結串列4: 迴圈連結串列
- 連結串列-單連結串列實現
- HDU 5444 Elven Postman (排序二叉樹 訪問路徑 陣列&&連結串列實現)Postman排序二叉樹陣列
- 【JavaScript】前端演算法題(重建二叉樹、反向輸出連結串列每個節點)JavaScript前端演算法二叉樹
- 連結串列入門與插入連結串列
- (連結串列)連結串列的排序問題排序
- 如何以及為什麼React Fiber使用連結串列遍歷元件樹React元件
- 連結串列
- 【LeetCode二叉樹#17】在二叉搜尋樹中插入或刪除某個值(涉及重構二叉樹、連結串列基礎、以及記憶體洩漏問題)LeetCode二叉樹記憶體
- javascript中的連結串列結構—雙向連結串列JavaScript
- 「譯」如何以及為什麼 React Fiber 使用連結串列遍歷元件樹React元件
- 判斷二叉樹是否為滿二叉樹二叉樹
- 根據一個輸入資料構造二叉樹和連結串列資料結構的方法(c++)二叉樹資料結構C++
- Leetcode_86_分割連結串列_連結串列LeetCode
- 【LeetCode】->連結串列->通向連結串列自由之路LeetCode
- (樹)根據排序陣列或者排序連結串列重新構建BST樹排序陣列
- php連結串列PHP
- 連結串列操作
- 連結串列逆序
- 2、連結串列