-
Notifications
You must be signed in to change notification settings - Fork 0
/
144. Binary Tree Preorder Traversal.cpp
64 lines (56 loc) · 1.73 KB
/
144. Binary Tree Preorder Traversal.cpp
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
/**
* 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 {
144. Binary Tree Preorder Traversal
public:
vector<int> preorderTraversal(TreeNode* root)
{
TreeNode* cur = root;
vector<int> toreturn;
while(cur!=nullptr)
{
if(cur->left == nullptr)
{
toreturn.push_back(cur->val);
cur = cur->right;
}
else
{
TreeNode* prev = cur->left;
while (prev -> right != NULL && prev -> right != cur)
{
prev = prev -> right;
}
if (prev -> right == NULL)
{
prev -> right = cur;
toreturn.push_back(cur -> val);
cur = cur -> left;
}
else
{
prev -> right = NULL;
cur = cur -> right;
}
}
}
return toreturn;
}
};
// Initialize current as root
// While current is not null:
// If current does not have a left child:
// (i) Print current's data.
// (ii) Go to the right, i.e., current = current.right
// Else:
// (i)Make current as the right child of the rightmost node in current's left subtree.
// (ii)Go to this left child, i.e., current = current.left.