https://www.dotcpp.com/oj/problem1592.html

  • 思路

    设当前串为S, 则画图模拟后有:

    • 若S的字符和S.value == S.length; 节点Node=I
    • 若S的字符和S.value == 0; 节点Node = B
    • 此外Node = F

    上述方法value不如改用统计0/1出现次数, 若能用正则表达式会减少跟多用时与代码量. 可惜我不会, 埃.

    循环\递归以上判断, 循环条件为S.length > 1;

    由于N≤10, 不会产生溢出, 或超时

  • 代码

    1. import java.util.*;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scan = new Scanner(System.in);
    5. Tree T = new Tree();
    6. scan.nextInt();
    7. String str = scan.next();
    8. T.CreatTree(str);
    9. T.aftOrder();
    10. }
    11. static class Tree{
    12. char c='$';
    13. Tree LC, RC;
    14. void CreatTree(String S) {
    15. int len = S.length();
    16. //统计0, 1出现次数
    17. int cnt1=0, cnt0=0;
    18. for(char ch: S.toCharArray())
    19. if(ch=='1') cnt1++;
    20. else cnt0++;
    21. if(cnt1==len)
    22. this.c = 'I';
    23. else if(cnt0==len)
    24. this.c = 'B';
    25. else
    26. this.c = 'F';
    27. if(len>1) {
    28. //递归创建左右子树
    29. this.LC = new Tree();
    30. this.RC = new Tree();
    31. this.LC.CreatTree(S.substring(0, len/2));
    32. this.RC.CreatTree(S.substring(len/2, len));
    33. }
    34. else return;
    35. }
    36. void aftOrder() {
    37. if(this!=null) {
    38. if(this.LC!=null)
    39. this.LC.aftOrder();
    40. if(this.RC!=null)
    41. this.RC.aftOrder();
    42. System.out.print(this.c);
    43. }
    44. return;
    45. }
    46. }
    47. }
点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论