题目描述
给定一颗根结点为root的二叉树,书中的每个结点都有一个从0到25的值,分别代表字母'a'到'z':值0代表'a',值1代表'b',依此类推。
找出按字典序最小的字符串,该字符串从这颗树的一个叶结点开始,到根结点结束。
(小贴士:字符串中任何较短的前缀在字典序上都是较小的:例如,在字典序上'ab'比'aba'要小。叶节点是指没有子节点的结点)
示例1
输入:[0,1,2,3,4,3,4]
输出:"dba"
解题思路:
要比较从叶结点到根结点路径上的字典序最小的字符串,首先要记录从跟结点到叶结点的字符。然后达到递归边界求解字典序最小的字符串。
vector<char> str;
string mins = "";
void preOrder(TreeNode* root){
if(root == NULL)return;
if(root->left == NULL && root->right == NULL){
str.push_back(root->val+97);
string s = "";
for(int i=str.size()-1;i>=0;i--) s += str[i];
if(mins == "")mins = s;
else mins = min(mins,s);
str.pop_back();
return;
}
str.push_back(root->val+97);
preOrder(root->left);
preOrder(root->right);
str.pop_back();
}
string smallestFromLeaf(TreeNode* root) {
preOrder(root);
return mins;
}