C++ 合并2个二叉树时出现运行时错误
我正试图从leetcode解决这个问题。这是我的C++代码< /p>C++ 合并2个二叉树时出现运行时错误,c++,runtime-error,c++14,binary-tree,dsa,C++,Runtime Error,C++14,Binary Tree,Dsa,我正试图从leetcode解决这个问题。这是我的C++代码< /p> class Solution { public: TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { TreeNode *t; if(t1==nullptr){return t2;} if(t2==nullptr){return t1;} t->val=t1->val+t2->va
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
TreeNode *t;
if(t1==nullptr){return t2;}
if(t2==nullptr){return t1;}
t->val=t1->val+t2->val;
t->left=mergeTrees(t1->left,t2->left);
t->right=mergeTrees(t1->right,t2->right);
return t;
}
};
此代码产生以下错误
Line 18: Char 12: runtime error: member access within misaligned address 0x000000000001 for type 'TreeNode', which requires 8 byte alignment (solution.cpp)
0x000000000001: note: pointer points here
<memory cannot be printed>
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior prog_joined.cpp:27:12
有人能解释一下为什么第一个代码会导致错误吗?
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
TreeNode *t;
if(t1==nullptr){return t2;}
if(t2==nullptr){return t1;}
t->val=t1->val+t2->val;
t是未初始化的指针,因此t->val是一个错误
你大概是指这样的事吧
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1==nullptr){return t2;}
if(t2==nullptr){return t1;}
TreeNode *t = new TreeNode;
t->val=t1->val+t2->val;
它确实解决了这个问题。
然而,我们仍然可以在这里简化我们的陈述:
您将“t”初始化为指向树节点的指针,然后应该添加t=new树节点;在您编写TreeNode*t;之后;。希望能奏效:看起来我们需要TreeNode类或结构的声明和定义。好吧,我们需要一个更精确的定义。@ThomasMatthews该链接在右侧显示了TreeNode的定义side@MonkeyDLuffy:抱歉,防火墙阻止我访问链接。
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1==nullptr){return t2;}
if(t2==nullptr){return t1;}
TreeNode *t = new TreeNode;
t->val=t1->val+t2->val;
// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
std::ios::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
return 0;
}();
static const struct Solution {
TreeNode* mergeTrees(
TreeNode* t1,
TreeNode* t2
) {
if (t1 && t2) {
TreeNode* root = new TreeNode(t1->val + t2->val);
root->left = mergeTrees(t1->left, t2->left);
root->right = mergeTrees(t1->right, t2->right);
return root;
}
return t1 ? t1 : t2;
}
};