当前位置:   article > 正文

中序遍历树(不一定是二叉树)_中序遍历升序一定是二叉搜索树吗

中序遍历升序一定是二叉搜索树吗

题目描述

给一棵树,你可以把其中任意一个节点作为根节点。每个节点都有一个小写字母,中序遍历,得到一个字符串,求所有能得到的字符串的字典序最小串。因为这棵树不一定是二叉树,所以中序遍历时,先中序遍历以节点序号最小的节点为根的子树,然后再遍历根节点,最后根据节点序号从小到大依次中序遍历剩下的子树。

HINT

意思就是请枚举所有的点为根,然后中序遍历
最后输出所有结果中字典序最小的
比如说第二组数据
以0为根时结果为 bacd
以1为根时结果为 cadb

以2为根时结果为 badc
以3为根时结果为 bacd
所以字典序最小的是bacd

 

 

输入格式

多组数据,以EOF结束。

第一行一个数n(0<n<=100),表示树的节点的个数,节点从0开始。

然后一个长度为n的串,第i(0<=i<n)个字符表示节点i的字符。
接下来n-1行,每行两个数a,b,(0<=a,b<n),表示a和b之间有一条无向边。

输出格式

题中要求的最小的字符串

输入样例

3
bac
0 1
1 2
4
abcd
0 1
0 2
0 3

输出样例

bac
bacd
根据题意,模拟书写递归函数。

首先不断递归到最左儿子,将最左儿子的字符加入ans字符串,接着回溯到父亲节点,判断刚才递归的是不是第一个儿子,如果是,就把父亲节点的字符加入ans。over。
伪代码如下
  1. dfs(father)
  2. for son in father
  3. if(not visited)
  4. dfs(son)
  5. if(is the first son)
  6. add(father)
  7. if father have no son
  8. add father




  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstring>
  4. #include <string>
  5. #include <algorithm>
  6. #include <cstdlib>
  7. #include <queue>
  8. const int maxn = 1000005;
  9. using namespace std;
  10. typedef long long ll;
  11. const int INF = 0x3f3f3f3f;
  12. #define mem(a,x) memset(a,x,sizeof a)
  13. char s[110];
  14. vector<int>G[110];
  15. string tmp;
  16. int vis[110];
  17. void traverse(int x){
  18. int isfirst =0;
  19. for(int i=0;i<G[x].size();i++){
  20. int nt = G[x][i];
  21. if(!vis[nt]){
  22. isfirst ++;
  23. vis[nt] = true;
  24. traverse(nt);
  25. if(isfirst == 1){
  26. tmp += s[x];
  27. }
  28. }
  29. }
  30. if(!isfirst)
  31. tmp += s[x];
  32. }
  33. int main(){
  34. int n;
  35. while(scanf("%d",&n) !=EOF){
  36. scanf("%s",s);
  37. for(int i=0;i<=n;i++) G[i].clear();
  38. for(int i=0;i<n-1;i++){
  39. int a,b;scanf("%d%d",&a,&b);
  40. G[a].push_back(b);
  41. G[b].push_back(a);
  42. }
  43. vector<string>vt;
  44. for(int i=0;i<n;i++){
  45. tmp = "";
  46. mem(vis,0);
  47. vis[i] = true;
  48. traverse(i);
  49. vt.push_back(tmp);
  50. }
  51. sort(vt.begin(),vt.end());
  52. cout<<vt[0]<<endl;
  53. }
  54. return 0;
  55. }


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/169460
推荐阅读
相关标签
  

闽ICP备14008679号