专栏文章

题解:P1001 A+B Problem

P1001题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipcx7vg
此快照首次捕获于
2025/12/03 09:57
3 个月前
此快照最后确认于
2025/12/03 09:57
3 个月前
查看原文

P1001 A+B Problem

0.前言

什么,可以发题解了?
必须来一波!

1.问题转化

不妨用DFS序。
创建一个虚拟的二叉树,其中左子节点代表A,右子节点代表B。使用DFS遍历这棵树,在遍历过程中累加节点的值即可。

2.代码

C
#include<bits/stdc++.h>
using namespace std;
//树节点结构
struct Tree
{
    int val;
    Tree* left;
    Tree* right;
    Tree(int x):val(x),left(nullptr),right(nullptr) {}
};
//DFS序
int dfsSum(Tree* root) 
{
    if(!root) return 0;
    stack<Tree*> s;
    s.push(root);
    int sum=0;
    while(!s.empty()) 
	{
        Tree* node=s.top();
        s.pop();
        sum+=node->val;
        if(node->right) s.push(node->right);
        if(node->left) s.push(node->left);
    }
    return sum;
}
int main() 
{
    int a,b;
    cin>>a>>b;
    //创建虚拟树结构
    Tree* root=new Tree(0);//虚拟根节点
    root->left=new Tree(a);//左子节点存储a
    root->right=new Tree(b);//右子节点存储b
    // 使用DFS序计算和
    int ans=dfsSum(root)-root->val;  // 减去虚拟根节点的值
    cout<<ans<<endl;
    return 0;
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...