题目描述:已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。
例如:两颗二叉树是:
*Tree 1 *
1
/ \
3 2
/
5
Tree 2
2
/ \
1 3
\ \
4 7
合并后的树为
3
/ \
4 5
/ \ \
5 4 7
示例1:
输入:{1,3,2,5},{2,1,3,#,4,#,7}
返回值:{3,4,5,5,4,#,7}
思路:顾名思义,合并两棵二叉树,将对应位置的节点值相加即可,使用递归无疑是最为简单直接的方式了,要合并两棵二叉树就要分别合并这两棵二叉树对应的左右子树。具体代码如下:
/**
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
class Solution {
public:
/**
*
* @param t1 TreeNode类
* @param t2 TreeNode类
* @return TreeNode类
*/
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
// write code here
if(t1 == NULL && t2 == NULL) return NULL;
if(t1 == NULL && t2 != NULL) return t2;
if(t1 != NULL && t2 == NULL) return t1;
TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = t1->val + t2->val;
root->left = mergeTrees(t1->left,t2->left);
root->right = mergeTrees(t1->right,t2->right);
return root;
}
};


京公网安备 11010502036488号