当前位置: 首页 > article >正文

总结7。。

二叉树的遍历是指按某条搜索路径访问树中的每个结点,使得每个结点均被访问一次,而且仅能访问一次(说明不可二次访问,一遍而过)。遍历一颗二叉树便要决定对根结点N、左子树L和右子树的访问顺序。 二叉树常的的遍历方法有前序遍历(NLR)、中序遍历(LNR)和后序遍历(LRN)三种遍历算法,其中 “序” 指的是根结点在何时被访问。

 #include <stdio.h>

#include <string.h>

// 存储二叉树前序、中序遍历结果的数组

char a[100], b[100];

// 根据前序和中序遍历构建二叉树并输出后序遍历

// c: 中序数组当前根节点位置,l: 中序数组左边界,r: 中序数组右边界

void d(int c, int l, int r) {

    if (l > r) return; // 子树为空,返回

    int i = l;

    while (i < r && a[i] != b[c]) i++; // 在中序数组找根节点位置

    d(c + 1, l, i - 1); // 处理左子树

    d(c + i - l + 1, i + 1, r); // 处理右子树

    printf("%c", b[c]); // 输出当前根节点

}

 

int main() {

    scanf("%s %s", a, b); // 读入前序和中序遍历结果

    d(0, 0, (int)strlen(a) - 1); // 开始构建并输出后序遍历

    printf("\n");

    return 0;

}

 由于2是最小的质数,在给定区间内,要使分解次数尽可能多,应尽量找2的幂次方形式的数。比如8 = 2×2×2,它有3个质因数,相比一些其他相同数量级的数,其质因数个数较多。所以,在[l, r]这个区间里,最大分数往往和r相关,因为r是区间上限,我们关注r以内最大的2的幂次方数。

#include <stdio.h>

// 模拟计算以2为底的对数的整数部分

int log2_int(int num) {

    int count = 0;

    while (num >>= 1) {

        count++;

    }

    return count;

}

 

int main() {

    int T;

    scanf("%d", &T);

    while (T--) {

        int l, r;

        scanf("%d %d", &l, &r);

        printf("%d\n", log2_int(r));

    }

    return 0;

}


http://www.kler.cn/a/516446.html

相关文章:

  • 指针生成网络(PGN)详细指南(引入)
  • 【橘子Kibana】Kibana的分析能力Analytics简易分析
  • mybatis-plus之使用lombok的@Builder注解之后的坑
  • selenium xpath定位一组元素中的某一个
  • 使用BitaHub部署DeepSeek-R1
  • malloc与new的比较
  • JAVA-快速排序
  • war包 | Docker部署flowable-ui
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(六)-分巧克力、K倍区间
  • 2000-2020年各省第二产业增加值数据
  • uniapp商城项目之创建启动(一)
  • Unity——鼠标是否在某个圆形Image范围内
  • Frida使用指南(三)
  • ThreeJS示例教程200+【目录】
  • 大数据学习(39)- Flink并行度
  • Springboot3 自动装配流程与核心文件:imports文件
  • machine learning knn算法之使用KNN对鸢尾花数据集进行分类
  • AIP-127 HTTP和gRPC转码
  • ASP.NET Core 6.0 如何处理丢失的 Startup.cs 文件
  • C语言初阶牛客网刷题——HJ100 等差数列【难度:简单】-20250123