DFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null) { return root2; } else if (root2 == null) { return root1; }
TreeNode root = new TreeNode(root1.val + root2.val); root.left = mergeTrees(root1.left, root2.left); root.right = mergeTrees(root1.right, root2.right);
return root; } }
|
DFS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null && root2 == null) { return null; }
TreeNode root = new TreeNode(); if (root1 != null) { root.val += root1.val; } if (root2 != null) { root.val += root2.val; }
root.left = mergeTrees(root1 == null ? null : root1.left, root2 == null ? null : root2.left); root.right = mergeTrees(root1 == null ? null : root1.right, root2 == null ? null : root2.right); return root; } }
|
BFS
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 52 53 54
| class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 == null) { return root2; } else if (root2 == null) { return root1; }
TreeNode node = new TreeNode(root1.val + root2.val); Queue<TreeNode> queue = new LinkedList<>(); Queue<TreeNode> queue1 = new LinkedList<>(); Queue<TreeNode> queue2 = new LinkedList<>(); queue.add(node); queue1.add(root1); queue2.add(root2);
while (!queue1.isEmpty() && !queue2.isEmpty()) { TreeNode mergedRoot = queue.poll(), leftRoot = queue1.poll(), rightRoot = queue2.poll(); TreeNode left1 = leftRoot.left, right1 = leftRoot.right; TreeNode left2 = rightRoot.left, right2 = rightRoot.right;
if (left1 != null || left2 != null) { if (left1 != null && left2 != null) { TreeNode left = new TreeNode(left1.val + left2.val); mergedRoot.left = left; queue.add(left); queue1.add(left1); queue2.add(left2); } else if (left1 != null) { mergedRoot.left = left1; } else if (left2 != null) { mergedRoot.left = left2; } }
if (right1 != null || right2 != null) { if (right1 != null && right2 != null) { TreeNode right = new TreeNode(right1.val + right2.val); mergedRoot.right = right; queue.add(right); queue1.add(right1); queue2.add(right2); } else if (right1 != null) { mergedRoot.right = right1; } else if (right2 != null) { mergedRoot.right = right2; }
} }
return node; } }
|
References
617. Merge Two Binary Trees