力扣988. 从叶结点开始的最小字符串
很明显还是用dfs遍历树,在遍历的过程中保存节点值,题目上要求的是从叶子节点到根节点逐个保存,构成字符串。找构成的最小的字符串。
我的思路是选择从根节点到叶子节点构成字符串,然后让它反转,用反转后的字符串来更新结果,通过不断更新结果来找到最小值。
/*** 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 {
public:string ans;void dfs(TreeNode* root,string s){if(root==nullptr){return ;}else{s+=(char)(root->val+'a');if(root->left==nullptr&&root->right==nullptr){string tmp;tmp=s;reverse(tmp.begin(),tmp.end());if(ans>tmp||ans==""){ans=tmp;}return;}dfs(root->left,s);dfs(root->right,s);s.pop_back();}}string smallestFromLeaf(TreeNode* root) {dfs(root,"");return ans;}
};
一些初始化和细节就不再赘述,直接看代码吧。
时间复杂度O(n^2),遍历*反转字符串