题解:P1001 A+B Problem
VelvetChords · · 题解
P1001 A+B Problem
0.前言
什么,可以发题解了?
必须来一波!
1.问题转化
不妨用DFS序。
创建一个虚拟的二叉树,其中左子节点代表A,右子节点代表B。使用DFS遍历这棵树,在遍历过程中累加节点的值即可。
2.代码
#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;
}