来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/merge-two-binary-trees 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。

解答

写一个遍历函数,左子节点合并左子节点,右子节点合并右子节点

  1. /**
  2. * Definition for a binary tree node.
  3. * function TreeNode(val, left, right) {
  4. * this.val = (val===undefined ? 0 : val)
  5. * this.left = (left===undefined ? null : left)
  6. * this.right = (right===undefined ? null : right)
  7. * }
  8. */
  9. /**
  10. * @param {TreeNode} root1
  11. * @param {TreeNode} root2
  12. * @return {TreeNode}
  13. */
  14. var mergeTrees = function(root1, root2) {
  15. function merge (p, q) {
  16. if (!p && !q) return null;
  17. if (p) {
  18. p.val = p.val + (q?.val || 0);
  19. } else {
  20. if (q) {
  21. p = new TreeNode(q.val);
  22. }
  23. }
  24. if (p) {
  25. p.left = merge(p.left, q?.left);
  26. p.right = merge(p.right, q?.right);
  27. }
  28. return p;
  29. }
  30. let result = merge(root1, root2);
  31. return result;
  32. };