-
-
Notifications
You must be signed in to change notification settings - Fork 297
/
Copy path988.cpp
115 lines (100 loc) · 3.14 KB
/
988.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
__________________________________________________________________________________________________
sample 8 ms submission
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* minimumLeaf;
void saveLeaf(TreeNode* leaf) {
if (!leaf) {
return;
}
if (!minimumLeaf) {
minimumLeaf = leaf;
return;
}
TreeNode* minimumLeafCopy = minimumLeaf;
TreeNode* leafCopy = leaf;
while (leafCopy && minimumLeafCopy) {
if (leafCopy->val < minimumLeafCopy->val) {
minimumLeaf = leaf;
return;
} else if (leafCopy->val > minimumLeafCopy->val) {
return;
} else {
leafCopy = leafCopy->left;
minimumLeafCopy = minimumLeafCopy->left;
}
}
if (minimumLeafCopy) {
minimumLeaf = leaf;
}
}
void rec(TreeNode* node, TreeNode* parent = nullptr) {
if (!node) { return; }
TreeNode* left = node->left;
TreeNode* right = node->right;
node->left = parent;
node->right = parent;
if (!left && !right) {
saveLeaf(node);
} else {
rec(left, node);
rec(right, node);
}
}
string smallestFromLeaf(TreeNode* root) {
rec(root);
stringstream result;
while (minimumLeaf) {
result << static_cast<char>(minimumLeaf->val + 'a');
minimumLeaf = minimumLeaf->left;
}
return result.str();
}
};
__________________________________________________________________________________________________
sample 14244 kb submission
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
string smallestFromLeaf(TreeNode* root) {
if (!root) return "";
string left = smallestFromLeaf(root->left);
string right = smallestFromLeaf(root->right);
if (left=="" && right=="") {
return string(1,'a'+ root->val);
} else if (left=="") {
return right + string(1, 'a'+ root->val);
} else if (right =="") {
return left + string(1, 'a'+root->val);
}
int i=0;
while(left[i]==right[i] && i < left.size() && i < right.size()) {
i++;
}
if(i == left.size()) {
return left + string(1,'a'+ root->val);
} else if (i==right.size()) {
return right + string(1,'a'+ root->val);
} else {
return left[i] > right[i] ? right + string(1,'a'+ root->val) : left + string(1,'a'+ root->val);
}
}
};
__________________________________________________________________________________________________