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

二叉树 —— 数据结构基础刷题路程

一、B3642 二叉树的遍历 - 洛谷

算法代码: 

#include<bits/stdc++.h>
using namespace std;
const int N=100005;
struct Node
{
    int v;
    int ls,rs;
}t[N];

void preorder(int p)
{
    if(p!=0)
    {
        cout<<t[p].v<<" ";
        preorder(t[p].ls);
        preorder(t[p].rs);
    }
}

void midorder(int p)
{
    if(p!=0)
    {
        midorder(t[p].ls);
        cout<<t[p].v<<" ";
        midorder(t[p].rs);
    }
}

void postorder(int p)
{
    if(p!=0)
    {
        postorder(t[p].ls);
        postorder(t[p].rs);
        cout<<t[p].v<<" ";
    }
}

int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    {
        int a,b;
        cin>>a>>b;
        t[i].v=i;
        t[i].ls=a;
        t[i].rs=b;
    }
    preorder(1);
    cout<<endl;
    midorder(1);
    cout<<endl;
    postorder(1);
    cout<<endl;
    return 0;
}

二、1.子树的大小 - 蓝桥云课

算法代码: 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        ll n,m,k;
        cin>>n>>m>>k;
        ll ans=1;
        ll ls=k,rs=k;

        while(1)
        {
            ls=(ls-1)*m+2;
            rs=rs*m+1;
            if(ls>n)
            {
                break;
            }
            if(rs>=n)
            {
                ans+=n-ls+1;
                break;
            }
            ans+=rs-ls+1;
        }
        cout<<ans<<endl;
    }
    return 0;
}

三、1.FBI树 - 蓝桥云课

算法代码: 

#include <bits/stdc++.h>
using namespace std;

char s[1100],tree[4400];

int ls(int p)
{
    return p<<1;
}

int rs(int p)
{
    return p<<1|1;
}

void build_FBI(int p,int left,int right)
{
    if(left==right)
    {
        if(s[right]=='1')
        {
            tree[p]='I';
        }
        else
        {
            tree[p]='B';
        }
        return;
    }

    int mid=(left+right)/2;
    build_FBI(ls(p),left,mid);
    build_FBI(rs(p),mid+1,right);
    if(tree[ls(p)]=='B'&&tree[rs(p)]=='B')
    {
        tree[p]='B';
    }
    else if(tree[ls(p)]=='I'&&tree[rs(p)]=='I')
    {
        tree[p]='I';
    }
    else
    {
        tree[p]='F';
    }
}

void postorder(int p)
{
    if(tree[ls(p)])
    {
        postorder(ls(p));
    }
    if(tree[rs(p)])
    {
        postorder(rs(p));
    }
    printf("%c",tree[p]);
}

int main()
{
    int n;
    cin>>n;
    cin>>s+1;
    build_FBI(1,1,strlen(s+1));
    postorder(1);
}

四、1.完全二叉树的权值 - 蓝桥云课

算法代码:

#include <bits/stdc++.h>
using namespace std;

// 递归函数,计算从某一层开始的权值之和
pair<int, int> dfs(int depth, int start, int N, const vector<int>& A) {
    if (start >= N) {
        return {0, depth - 1}; // 如果超出范围,返回 0 和上一层的深度
    }

    // 计算当前层的结束索引
    int end = min(start + (1 << (depth - 1)), N);
    int sum = 0;
    for (int i = start; i < end; ++i) {
        sum += A[i];
    }

    // 递归计算下一层的权值之和
    auto next = dfs(depth + 1, end, N, A);

    // 比较当前层和下一层的权值之和
    if (sum >= next.first) {
        return {sum, depth}; // 如果当前层更大,返回当前层的深度
    } else {
        return next; // 否则返回下一层的结果
    }
}

int main() {
    int N;
    cin >> N;
    vector<int> A(N);
    for (int i = 0; i < N; ++i) {
        cin >> A[i];
    }

    // 调用递归函数,从深度 1 开始
    auto result = dfs(1, 0, N, A);

    // 输出结果
    cout << result.second << endl;

    return 0;
}
http://www.dtcms.com/a/107141.html

相关文章:

  • Linux驱动入门——设备树详解
  • 海外SD-WAN专线网络部署成本分析
  • Adv. Sci.:在精神分裂症中绘制大脑协同功能障碍图谱:理解个体差异和潜在的分子机制
  • 鸿蒙项目笔记(1)
  • 26考研资料分享考研资料合集 百度网盘(仅供参考学习)
  • [250330] OpenAI 发布 GPT-4o 图像生成:实用主义的图像生成时代到来 | Maple Mono v7.0 发布
  • AI 智能体(AI Agent):概念、历史、现状与展望
  • OpenManus安装部署和基础使用说明
  • 【boost搜索引擎】下
  • 鸿蒙开发踩坑记录 - 2024S1
  • PROMPT 速查
  • 对象和面向对象三大特征:封装
  • RAG 在 AI 助手、法律分析、医学 NLP 领域的实战案例
  • 并行治理机制对比:Polkadot、Ethereum 与 NEAR
  • DDR简介
  • 【工程开发】Qwen2.5-VL-32B-Instruct 微调(三)
  • ARM边缘计算时代:BLIoTLink如何打通设备互联任督二脉
  • 超级预告新豪轩门窗吉尼斯世界纪录挑战暨百媒共探国家级绿色工厂
  • Qt常用控件第一部分
  • 计组(蒋)期末不挂科纲要
  • Flutter入门(完整教程)
  • 19信号和槽_信号和槽的基本概念
  • 406. 根据身高重建队列
  • Docker 构建镜像异常报错解决
  • 深入剖析Linux常用命令,助力高效操作
  • 23.6 CharGLM多模态API实战:24k上下文角色一致性优化全解析
  • cmake 中的命令
  • Java面试题总结
  • C语言 - 指针变量 + 1 的本质
  • Linux中动静态库的制作