問題詳情
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.
You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.
Example 1:
Input:
Tree 1 Tree 2
1 2
/ \ / \
3 2 1 3
/ \ \
5 4 7
Output:
Merged tree:
3
/ \
4 5
/ \ \
5 4 7
Note: The merging process must start from the root nodes of both trees.
數據結構爲:
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
}
問題分析及思路
這道題是要講兩個二叉樹合併,新的二叉樹的每個位置的值爲原來兩個二叉樹對應位置的值之和,運用遞歸解決即可。
算法複雜度與二叉樹的最高層數有關。
具體代碼
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if (!t1) return t2;
if (!t2) return t1;
TreeNode* nownode = new TreeNode(t1 -> val + t2 -> val);
nownode -> left = mergeTrees(t1-> left, t2 -> left);
nownode -> right = mergeTrees(t1 -> right, t2 -> right);
return nownode;
}
};