diff --git "a/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/617. Merge Two Binary Trees.md" "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/617. Merge Two Binary Trees.md"
new file mode 100644
index 0000000..319b970
--- /dev/null
+++ "b/\347\253\266\346\212\200\343\203\227\343\203\255\345\260\261\346\264\273\351\203\250PR\347\224\250/617. Merge Two Binary Trees.md"
@@ -0,0 +1,94 @@
+
+
+## DFSによる解法 (17m32s)
+時間計算量: O(N)
+空間計算量: O(3N) (root1 + root2 + merged root)
+
+下記の解法は、新しい木を作成しているため、空間計算量が最適ではないことに気が付く。
+### 1回目
+```python
+class Solution:
+ def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
+ if not root1:
+ return root2
+ if not root2:
+ return root1
+
+ merged_root = TreeNode(root1.val + root2.val)
+ merged_root.left = self.mergeTrees(root1.left, root2.left)
+ merged_root.right = self.mergeTrees(root1.right, root2.right)
+
+ return merged_root
+```
+
+
+### 2~3回目 (変化なし)
+mergeされる結果はrootだけではないため、変数名をmerged_nodeに変更
+時間計算量: 1回目と同じ
+空間計算量: 1回目と同じ
+
+```python
+class Solution:
+ def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
+ if not root1:
+ return root2
+ if not root2:
+ return root1
+
+ merged_node = TreeNode(root1.val + root2.val)
+ merged_node.left = self.mergeTrees(root1.left, root2.left)
+ merged_node.right = self.mergeTrees(root1.right, root2.right)
+
+ return merged_node
+```
+
+## 新しい木を作成しない解法 (root1にroot2をマージ)
+時間計算量: O(N)
+空間計算量: O(2N) (root1 + root2)
+
+```python
+class Solution:
+ def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
+ if not root1:
+ return root2
+ if not root2:
+ return root1
+
+ root1.val += root2.val
+ root1.left = self.mergeTrees(root1.left, root2.left)
+ root1.right = self.mergeTrees(root1.right, root2.right)
+
+ return root1
+```
+
+
+## BFSによる解法 (新しい木を作成しない解法 (root1にroot2をマージ))
+あまり綺麗なコードにならなかった。特にif分岐がわかりづらい。
+時間計算量: O(N)
+空間計算量: O(2N) (root1 + root2)
+
+```python
+class Solution:
+ def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:
+ if not root1:
+ return root2
+ if not root2:
+ return root1
+
+ next_nodes = deque([(root1, root2)])
+ while next_nodes:
+ node1, node2 = next_nodes.popleft()
+ node1.val += node2.val
+
+ if node1.left and node2.left:
+ next_nodes.append((node1.left, node2.left))
+ elif node2.left:
+ node1.left = node2.left
+
+ if node1.right and node2.right:
+ next_nodes.append((node1.right, node2.right))
+ elif node2.right:
+ node1.right = node2.right
+
+ return root1
+```