1、寻找合适的递归终止条件(合适的终止条件能有效减少代码量以及空间、时间占用量)。
2、编写单层递归逻辑。
3.确定参数以及返回值。
我的代码:
TreeNode *dfs(TreeNode *r1,TreeNode *r2){
if(r1==NULL&&r2==NULL)return NULL; //当左、右节点都为NULL是返回。(递归终止条件)
TreeNode *b = new TreeNode(0);
if(r1&&r2){
int bvaule = r1->val + r2->val;
b->val = bvaule;
}
else if(r1){
r2 = new TreeNode(0); //对r2树 与r1树 对应的空节点进行补足,防止越界;补足原因:由于终止条件选取不是十分合适;
int bvaule = r1->val;
b->val = bvaule;
}
else if(r2){
r1 = new TreeNode(0); //对r1树 与r2树 对应的空节点进行补足,防止越界;补足原因:由于终止条件选取不是十分合适;
int bvaule = r2->val;
b->val = bvaule;
}
b->left = dfs(r1->left,r2->left);
b->right = dfs(r1->right,r2->right);
return b;
}
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
return dfs(root1,root2);
}
题解:
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
if(root1==NULL)return root2;
if(root2==NULL)return root1;
root1->val += root2->val;
root1->left = mergeTrees(root1->left,root2->left);
root1->right = mergeTrees(root1->right,root2->right);
return root1;
}