惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
V
Visual Studio Blog
有赞技术团队
有赞技术团队
T
Tailwind CSS Blog
B
Blog
I
InfoQ
博客园 - 三生石上(FineUI控件)
阮一峰的网络日志
阮一峰的网络日志
F
Fortinet All Blogs
H
Help Net Security
博客园 - Franky
宝玉的分享
宝玉的分享
博客园 - 司徒正美
C
Check Point Blog
G
Google Developers Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Jina AI
Jina AI
T
The Blog of Author Tim Ferriss
MongoDB | Blog
MongoDB | Blog
云风的 BLOG
云风的 BLOG
A
About on SuperTechFans
罗磊的独立博客
大猫的无限游戏
大猫的无限游戏
IT之家
IT之家

博客园_首页

Linux实操--组管理、权限管理和定时任务 Java + EasyExcel 实现单个接口导出多个Excel Mem0 源码解析系列(二):提示词工程的深度剖析 Openclaw TaskFlow究竟是什么?和普通Skill技能有什么区别 博文阅读密码验证 - 博客园 嘉立创开源:应该是全网MicroPython教程最多的开发板 Hermes Agent 集成实践:从协议到生产 2026年AI编程工具横评:Cursor、Codex、Claude Code、Zed、Windsurf Java程序员必看的RAG入门教程 2026 AI效率神器:Superpowers + Claude Code 保姆级教程 本地大模型部署全攻略:从 0 到 1 玩转 Ollama 【从0到1构建一个ClaudeAgent】内存管理-上下文压缩 .NET 高级开发 | 设计、实现一个事件总线框架 电子小白入门之NE555 3. WorkBuddy:隐藏玩法,一键召唤专家,让 AI 以"专家身份"给你干活 和AI一起搞事情#3:Claude Teammate 游戏开发翻车实录 【OpenClaw】通过 Nanobot 源码学习架构---(7)Memory C# .NET 周刊|2026年3月3期 我在 Debian 11 上把 K8s 单机搭起来了,过程没你想的那么顺(/opt 目录版) 深度学习进阶(七)Data-efficient Image Transformer CLI+Skill搭建浏览器AI自动化框架,告别一切重复枯燥任务 告别Token账单无底洞:OpenClaw本地部署,重塑企业数据主权的唯一解 FastAPI+Vue:文件分片上传+秒传+断点续传,这坑我帮你踩平了! SBTI 爆火后,我做了个程序员版的 CBTI。。已开源 + 附开发过程 多模态检索开始进入工程期:用 Sentence Transformers 搭建可落地的 Multimodal RAG 100多行代码实现一个最简单的Agent(用ReAct) Claude Code 通关手册(八):推荐 5 个 Hooks,代码质量提升 3 倍 老板:“有人截图了!”。安全部门:“收到,马上查暗水印!” - why技术 技术之外,皆是人间 C#/.NET/.NET Core技术前沿周刊 | 第 69 期(2026年4.01-4.12)
题目求助!洛谷P1185题绘制二叉树
myLv · 2026-05-10 · via 博客园_首页

我的代码

9个测试点中,7和9过不了,又不给测试的数据,不知道哪里错了要怎么修改代码。
我的思路:
1.用一个二维数组,先构建完整的二叉树
2.删除节点

  • 删除节点分为两部分:1)删除父节点与节点之间的边;2)删除从节点开始的所有节点和边
    问AI,AI也给不出哪里有问题,只能求助博客园的各位大佬了/_
    题目链接:绘制二叉树
#include <bits/stdc++.h>
using namespace std;

int m, n, WIDTH, HEIGHT;
vector<vector<char>> tree(800, vector<char>(1600, ' '));

// 构建二叉树
void build(int f, int y, int t)
{
    if (t >= m) return;

    tree[f][y] = 'o';

    int height = pow(2, m-2-t) * 3 / 2 - 1;
    if (height == 0) height = 1;
    int balance = 1;
    for (int i = 0; i < height; i++)
    {
        tree[f+balance][y-balance] = '/';
        tree[f+balance][y+balance] = '\\';
        balance++;
    }

    int newf = f + height + 1, newly = y - balance, newry = y + balance;
    build(newf, newly, t+1);
    build(newf, newry, t+1);
}

// 删除节点
void remove(int f, int y, int t)
{
    if (t >= m || tree[f][y] != 'o') return;

    tree[f][y] = 'O';

    int height = pow(2, m-2-t) * 3 / 2 - 1;
    if (height == 0) height = 1;
    int balance = 1;
    for (int i = 0; i < height; i++)
    {
        tree[f+balance][y-balance] = ' ';
        tree[f+balance][y+balance] = ' ';
        balance++;
    }

    int newf = f + height + 1, newly = y - balance, newry = y + balance;
    remove(newf, newly, t+1);
    remove(newf, newry, t+1);
}

int main()
{
    cin >> m >> n;
    
    WIDTH = pow(2, m-1) * 3, HEIGHT = 0;
    switch (m)
    {
        case 2: HEIGHT = 1; break;
        case 3: HEIGHT = 3; break;
        case 4: HEIGHT = 8; break;
        case 5: HEIGHT = 19; break;
        case 6: HEIGHT = 42; break;
        case 7: HEIGHT = 89; break;
        case 8: HEIGHT = 184; break;
        case 9: HEIGHT = 375; break;
        case 10: HEIGHT = 785; break;
    }
    HEIGHT += m;

    int dy = pow(2, m-2) * 3;
    build(0, dy, 0);

    for (int i = 0; i < n; i++)
    {
        int a, b;
        cin >> a >> b;

        int tx = 0, ty = 0; // 表示父节点的坐标,下面的x,y表示的是要删除节点的坐标
        int arr[9] = {1, 2, 5, 11, 23, 47, 95, 191, 383}; // 每一层需要的边“/,\”的数目
        for (int i = m; i > m-a+2; i--) tx += arr[i-2];
        tx += a - 2;

        int cnt = 0, x = tx + arr[m-a] + 1, y = 1;
        for (int j = 1; j < 1600; j++)
        {
            if (tree[x][j] == 'o' || tree[x][j] == 'O') cnt++;
            if (cnt == b)
            {
                y = j;
                break;
            }
        }

        // 判断要删除父节点的左边还是右边的那条边,b为偶数就是右节点,奇数是左节点
        if (b % 2) ty = y + (x - tx);
        else ty = y - (x - tx);
        // 清理父节点剩余的边
        int pre = a - 1, height = 0, balance = 1;
        height = pow(2, m-1-pre) * 3 / 2 - 1;
        if (height == 0) height = 1;
        for (int i = 0; i < height; i++)
        {
            if (b % 2) tree[tx+balance][ty-balance] = ' ';
            else tree[tx+balance][ty+balance] = ' ';
            balance++;
        }
        // 删除节点
        remove(x, y, a-1);
    }
    // 输出答案
    for (int i = 0; i < HEIGHT; i++)
    {
        for (int j = 1; j < WIDTH; j++)
            if (tree[i][j] == 'O') cout << ' ';
            else cout << tree[i][j];
        cout << endl;
    }
    return 0;
}

文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!文字太少了投不到首页,凑字数!