• P1087 FBI树


    #include<stdio.h>
    #include<math.h>
    char A[1025];
    void work(int low, int up)
    {
        int mid = (low+up)/2;
        if (low!=up){
            work(low, mid);
            work(mid+1,up);
        }
        int i,a=0,b=0;
        for (i=low;i<=up;i++)
            if (A[i]=='0') a++;
            else b++;
        if (a&&b) printf("F");
        else if (a) printf("B");
        else printf("I");
    }
    int main()
    {
        int n;
        scanf("%d", &n);
        scanf("%s", A+1);
        work(1, pow(2,n));
        return 0;
    }
    

      

    算法

    二分

    思路

    递归即可。跟二分查找的思想有点像。想起以前学长跟我说的,很多树的题目事实上根本不用把树建立出来,虽然当时觉得这个思想很惊奇,但现在自己也算真正的理解了这句话了。

    树的遍历

    前序

    preOrderParse(int n) {
        if(tree[n] == NULL)
            return ; // 如果这个节点不存在,那么结束 
    
        cout << tree[n].w ; // 输出当前节点内容     
        preOrderParse(tree[n].leftChild); // 递归输出左子树 
        preOrderParse(tree[n].rightChild); // 递归输出右子树 
    }
    

      中序

    inOrderParse(int n) {
        if(tree[n] == NULL)
            return ; // 如果这个节点不存在,那么结束 
    
        inOrderParse(tree[n].leftChild); // 递归输出左子树 
        cout << tree[n].w ; // 输出当前节点内容 
        inOrderParse(tree[n].rightChild); // 递归输出右子树 
    }
    

      后序

    pastOrderParse(int n) {
        if(tree[n] == NULL)
            return ; // 如果这个节点不存在,那么结束 
    
        pastOrderParse(tree[n].leftChild); // 递归输出左子树 
        pastOrderParse(tree[n].rightChild); // 递归输出右子树 
        cout << tree[n].w ; // 输出当前节点内容     
    }
    

      见https://www.cnblogs.com/z-x-y/articles/10004938.html

     代码

  • 相关阅读:
    mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
    java中使用正则表达式
    Timer与ScheduledThreadPoolExecutor的比较
    Java同步块
    java中的浅拷贝与深拷贝
    java的关闭钩子(Shutdown Hook)
    JVM系列三:JVM参数设置、分析
    java虚拟机参数设置
    UTF-8编码规则(转)
    过滤3个字节以上的utf-8字符
  • 原文地址:https://www.cnblogs.com/ruanmowen/p/12899839.html
Copyright © 2020-2023  润新知