这个题目本质是对两棵树做遍历,同时生产一棵新的树,树的节点值就是原来两棵树节点值的和
刚开始我的思路如下:
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1==NULL && t2==NULL)
{
return NULL;
}
else
{
TreeNode *node=new TreeNode((t1?t1->val:0) + (t2?t2->val:0) );
node->left=mergeTrees((t1->left,t2->left);
node->right=mergeTrees(t1->right,t2->right);
return node;
}
}
};
但是报错了,错误为:member access within null pointer of type 'struct TreeNode' 意思是访问了空指针中的成员变量,例如t1==NULL,但是我用到了t1->left和t2->right,这个很明显是错误的。因此改完之后如下:
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if(t1==NULL && t2==NULL) //递归边界
{
return NULL;
}
else
{
TreeNode *node=new TreeNode((t1?t1->val:0) + (t2?t2->val:0) ); //这种用法以前很少见到,值得铭记
node->left=mergeTrees((t1?t1->left:NULL),(t2?t2->left:NULL)); //用三元表达式来选择传入哪种参数
node->right=mergeTrees(t1?t1->right:NULL,(t2?t2->right:NULL));
return node;
}
}
};