这题要求合并两个二叉树,相同位置的节点数值相加,如果有不存在的情况,采用存在的那个子树。
主要思想:采用递归,两个子树同时遍历,从某一根节点开始,先考虑根。我们直接在第一个子树上修改。如果第二个子树为空,什么都不做。如果第一个为空,第二个不空,直接采用第二个子树。如果都不空,把根处的值相加,然后递归的处理左子树和右子树。
细节:递归的函数需要指针加引用
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
merge(t1, t2);
return t1;
}
void merge(TreeNode *& i, TreeNode *& j)
{
if(j == NULL)return ;
if(i == NULL && j != NULL){i = j; return ;}
if(i != NULL && j != NULL){
i->val += j->val;
merge(i->left, j->left);
merge(i->right, j-> right);
}
}
};