題目

將Binary Tree轉成Linked List,而Linked List的順序需以pre-order traversal尋訪的順序。

解題方法

採取的方法是參考網路上的。
主要是分別將節點以post-order的方式去做合併,這樣就可以達到題目所要求的目的。
先將左邊的節點串接在一起後,再放入右邊節點,而原本右節點就擺至最後。

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class Solution {
public:
void flatten(TreeNode* root) {
postorder(root);
}
void postorder(TreeNode* node)
{
if(!node)
return;
postorder(node->left);
postorder(node->right);
//Merge node
TreeNode *tmp = node->right;
node->right = node->left;
node->left = nullptr;

while(node->right)
node = node->right;

node->right = tmp;
}
};