Skip to content

Commit 6f85cbf

Browse files
Add files via upload
1 parent 6098e36 commit 6f85cbf

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Runtime: 24 ms, faster than 7.50% of C++ online submissions for Smallest String Starting From Leaf.
2+
// Memory Usage: 19.6 MB, less than 91.30% of C++ online submissions for Smallest String Starting From Leaf.
3+
4+
/**
5+
* Definition for a binary tree node.
6+
* struct TreeNode {
7+
* int val;
8+
* TreeNode *left;
9+
* TreeNode *right;
10+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
11+
* };
12+
*/
13+
class Solution
14+
{
15+
public:
16+
string smallestFromLeaf(TreeNode* root)
17+
{
18+
string curString = "", minString = "";
19+
20+
TreeNode* preNode = nullptr;
21+
stack<TreeNode*> memo;
22+
23+
while (root || !memo.empty())
24+
{
25+
while (root)
26+
{
27+
curString += root->val + 'a';
28+
29+
memo.push(root);
30+
root = root->left;
31+
}
32+
if (!memo.empty())
33+
{
34+
root = memo.top();
35+
memo.pop();
36+
37+
if (root->right == nullptr || root->right == preNode)
38+
{
39+
if (root->left == nullptr && root->right == nullptr)
40+
{
41+
if (minString.length() == 0 || smaller(curString, minString))
42+
{
43+
minString = curString;
44+
}
45+
}
46+
47+
curString.pop_back();
48+
49+
preNode = root;
50+
root = nullptr;
51+
}
52+
else
53+
{
54+
memo.push(root);
55+
root = root->right;
56+
}
57+
}
58+
}
59+
60+
reverse(minString.begin(), minString.end());
61+
return minString;
62+
}
63+
private:
64+
bool smaller(const string& str1, const string& str2)
65+
{
66+
int ptr1 = str1.length() - 1;
67+
int ptr2 = str2.length() - 1;
68+
69+
while (ptr1 >= 0 && ptr2 >= 0)
70+
{
71+
if (str1[ptr1] < str2[ptr2])
72+
{
73+
return true;
74+
}
75+
else if (str1[ptr1] > str2[ptr2])
76+
{
77+
return false;
78+
}
79+
else
80+
{
81+
--ptr1;
82+
--ptr2;
83+
}
84+
}
85+
86+
return ptr1 >= 0 ? false : true;
87+
}
88+
};

0 commit comments

Comments
 (0)