https://leetcode.com/problems/merge-two-binary-trees/

1. Use recursion:

  1. //44 ms 21.9 MB
  2. /**
  3. * Definition for a binary tree node.
  4. * struct TreeNode {
  5. * int val;
  6. * TreeNode *left;
  7. * TreeNode *right;
  8. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
  9. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
  10. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  11. * };
  12. */
  13. class Solution {
  14. public:
  15. TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
  16. if(!t1 && !t2)
  17. return NULL;
  18. if(t1 && t2){ //if both t1 and t2 exist
  19. t1->val = t1->val + t2->val;
  20. t1->left = mergeTrees(t1->left, t2->left);
  21. t1->right = mergeTrees(t1->right, t2->right);
  22. } else if(t1 && !t2){ //if only current t2 is empty
  23. return t1;
  24. } else if(!t1 && t2){ //if only current t1 is empty
  25. return t2;
  26. }
  27. return t1;
  28. }
  29. };

Time Complexity : O(m)
Space Complexity : O(m)
m = the minimum number of nodes from the two given trees