• 问题 A: 二叉排序树 - 文本输出


    题目描述

    给定一个序列,使用该序列生成二叉排序树(也叫二叉搜索树,BST),然后以本题规定方法输出该二叉排序树。
    例:
    给定一个序列:43 25 29 67 17 88 54 47 35 62
    以第一个数字43)为根节点,然后将后面的数字依输入次序逐个添加至该树中,得到一个二叉排序树,如下图所示。

    然后先序遍历上面这个树,并按行输出数字。
    其中每个子节点的输出前,需要相较于其父节点前多四个普通空格。
    当某个节点为叶子节点(即无子节点),则该节点的左右叶子节点均不用输出。
    而当某个节点仅有左叶子节点或右叶子节点时,另一个空缺的子节点用#占位。


    以该图为例,其最终输出结果为:
    43
        25
            17
            29
                #
                35
        67
            54
                47
                62
            88 

    输入格式

    第一行为正整数n,表示接下来将输入的节点数量。(n<500)
    第二行为n个正整数,每个数字以空格分隔(以第一个数字为根节点)

    输出格式

    以题目描述中的方法输出得到的二叉排序树。
    以第一个数字为根节点,然后将后面的数字依输入次序逐个添加至该树中,得到一个二叉排序树。
    然后先序遍历该树,并按行输出数字。
    其中每个子节点的输出前,需要相较于其父节点前多四个普通空格。
    当某个节点为叶子节点(即无子节点),则该节点的左右叶子节点均不用输出。
    而当某个节点仅有左叶子节点或右叶子节点时,另一个空缺的子节点用#占位。
     

    输入样例

    1. 10
    2. 43 25 29 67 17 88 54 47 35 62

    输出样例  

    1. 43
    2. 25
    3. 17
    4. 29
    5. #
    6. 35
    7. 67
    8. 54
    9. 47
    10. 62
    11. 88

    代码展示 

    注意题目要求的输出格式

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. using namespace std;
    7. struct BiNode{
    8. BiNode(int aKey){
    9. key=aKey;
    10. lchild=rchild=nullptr;
    11. }
    12. int key;
    13. BiNode *lchild,*rchild;
    14. };
    15. using BiTree=BiNode*;
    16. int InitBiTree(BiTree &T){
    17. T=nullptr;
    18. return 0;
    19. }
    20. int Insert2(BiTree &T,int aKey){
    21. //定位插入位置
    22. BiNode **p=&T;
    23. while(*p!=nullptr&&(*p)->key!=aKey){
    24. p=aKey<(*p)->key?&(*p)->lchild:&(*p)->rchild;
    25. }
    26. if(*p!=nullptr)
    27. return 1;
    28. //插入新结点
    29. *p=new BiNode(aKey);
    30. return 0;
    31. }
    32. //test
    33. int InTraverse(BiTree T){
    34. if(T==nullptr) return 0;
    35. InTraverse(T->lchild);
    36. cout<key<<" ";
    37. InTraverse(T->rchild);
    38. return 0;
    39. }
    40. string s="";
    41. void InorderTree(BiTree T){
    42. cout<
    43. if(T){
    44. cout<key<<" ";
    45. cout<
    46. if(T->lchild||T->rchild){
    47. s+=" ";
    48. InorderTree(T->lchild);
    49. InorderTree(T->rchild);
    50. for(int i=0;i<4;i++) s.pop_back();
    51. }
    52. }
    53. else{
    54. cout<<"#"<
    55. }
    56. }
    57. int main(){
    58. //freopen("/config/workspace/test/test","r",stdin);
    59. int n;
    60. cin>>n;
    61. int a[n];
    62. for(int i=0;i
    63. cin>>a[i];
    64. }
    65. BiTree T;
    66. InitBiTree(T);
    67. for(int i=0;i
    68. Insert2(T,a[i]);
    69. }
    70. //InTraverse(T);
    71. InorderTree(T);
    72. return 0;
    73. }

    //闲叙题外话:好奇妙的感觉...!

  • 相关阅读:
    宠物行业如何进行私域获客转化
    Qt源码调试
    细说js变量、作用域和垃圾回收
    nodejs下载指定版本
    AI教程视频《AI illustrator入门到精通》零基础自学教程教学
    定时器学习
    分区存储管理模拟实验
    Java 学习笔记
    网安学习-Python3
    自然语言处理实战项目17-基于多种NLP模型的诈骗电话识别方法研究与应用实战
  • 原文地址:https://blog.csdn.net/weixin_65908362/article/details/128184343