今天做一道二叉树 合并二叉树的算法题目。(题目来源,LeetCode617
题目
合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点
示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| 输入: Tree 1 Tree 2 1 2 / \ / \ 3 2 1 3 / \ \ 5 4 7 输出: 合并后的树: 3 / \ 4 5 / \ \ 5 4 7
|
注意: 合并必须从两个树的根节点开始。
思路
- 从根节点开始合并—二叉树前序遍历
- 一棵树为空时,直接返回另一棵树
- 返回其中一颗树,可以减少再创造一棵树的空间
题目解答
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
var mergeTrees = function (root1, root2) { if (root1 == null) { return root2; } if (root2 == null) { return root1; }
trval(root1, root2); return root1;
function trval(node1, node2) { if (!node1 && !node2) { return; }
if (node1 && node2) { node1.val = node1.val + node2.val; if (!node1.left) { node1.left = node2.left; node2.left = null; } if (!node1.right) { node1.right = node2.right; node2.right = null; } trval(node1.left, node2.left); trval(node1.right, node2.right); } else if (!node1) { node1 = node2; trval(node1.left); trval(node1.right); } } };
|