题目描述
LeetCode链接
给定两棵二叉树t1和t2,将两棵树相同位置的节点相加,得到合并后的树,要求返回合并后的二叉树。若有且仅有一棵树的某个位置的节点为空,那么合并后的树的这个位置,值为非空的那个节点的值。
解题
首先,先序遍历两棵树。若两棵树均为空,返回空。若两棵树至少有一棵不为空,那么将根节点相加(当有一个节点为空时,将其值记为0)。递归调用,分别处理左子树和右子树。
代码实现
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2) {
if(!t1 && !t2)return NULL;
struct TreeNode* tm = (struct TreeNode *)malloc(sizeof(struct TreeNode));
tm->val = ((t1 ? t1->val : 0) + (t2 ? t2->val : 0));
tm->left = mergeTrees(t1 ? t1->left : NULL, t2 ? t2->left : NULL);
tm->right = mergeTrees(t1 ? t1->right : NULL, t2 ? t2->right : NULL);
return tm;
}