-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFlattenBinaryTreeToLinkedList.cpp
More file actions
75 lines (61 loc) · 1.34 KB
/
Copy pathFlattenBinaryTreeToLinkedList.cpp
File metadata and controls
75 lines (61 loc) · 1.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
// Q128 https://leetcode.com/problems/flatten-binary-tree-to-linked-list/
// Using Morris traversal
// Time: O(n)
// Space: O(1)
class Solution {
public:
void flatten(TreeNode* root) {
TreeNode* cur=root;
while(cur!=NULL){
if(cur->left){
TreeNode* prev=cur->left;
while(prev->right) prev=prev->right;
prev->right=cur->right;
cur->right=cur->left;
cur->left=NULL;
}
cur=cur->right;
}
}
};
//Recursion (Reverese preorder)
// Time: O(n)
// Space: O(n)
class Solution {
node * prev = NULL;
public:
void flatten(node * root) {
if (root == NULL) return;
flatten(root -> right);
flatten(root -> left);
root -> right = prev;
root -> left = NULL;
prev = root;
}
};
//Iteratively (Using Stack)
// Time: O(n)
// Space: O(n)
class Solution {
node * prev = NULL;
public:
void flatten(node * root) {
if (root == NULL) return;
stack < node * > st;
st.push(root);
while (!st.empty()) {
node * cur = st.top();
st.pop();
if (cur -> right != NULL) {
st.push(cur -> right);
}
if (cur -> left != NULL) {
st.push(cur -> left);
}
if (!st.empty()) {
cur -> right = st.top();
}
cur -> left = NULL;
}
}
};