From 23d7d9ee7705ec48c47fb46824e40a377873541f Mon Sep 17 00:00:00 2001 From: Hiro Funatsuka Date: Sun, 26 Apr 2026 12:12:03 +0900 Subject: [PATCH] Solve merge two binary trees --- README.md | 2 +- step1.md | 32 ++++++++++++++++++++++++++++++-- step2.md | 19 +++++++++++++++++++ step3.md | 26 +++++++++++++++++++++++--- 4 files changed, 73 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0ee68b0..ce877f3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # LeetCode -## 問題: [Link Text](URL) +## 問題: [617. Merge Two Binary Trees](https://leetcode.com/problems/merge-two-binary-trees/description/) ## 前提 diff --git a/step1.md b/step1.md index 54ebbc1..f5ed622 100644 --- a/step1.md +++ b/step1.md @@ -1,7 +1,35 @@ # Step 1 +- non-tail recursionでできると思うが上手く言語化できない。 + ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if root1 is None and root2 is None: + return None + if root1 is None: + merged_root = TreeNode(val=root2.val) + merged_root.left = self.mergeTrees(None, root2.left) + merged_root.right = self.mergeTrees(None, root2.right) + elif root2 is None: + merged_root = TreeNode(val=root1.val) + merged_root.left = self.mergeTrees(root1.left, None) + merged_root.right = self.mergeTrees(root1.right, None) + else: + merged_root = TreeNode(val=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 ``` -時間計算量: -空間計算量: +時間計算量: O(n) + +空間計算量: O(n) + +- 何も見ずに書けたものの、30分くらいかかってしまった。 diff --git a/step2.md b/step2.md index 6ec3360..c40c0d2 100644 --- a/step2.md +++ b/step2.md @@ -1,4 +1,23 @@ # Step 2 ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if not root1 and not root2: + return None + + val1 = root1.val if root1 else 0 + val2 = root2.val if root2 else 0 + merged_root = TreeNode(val1 + val2) + + merged_root.left = self.mergeTrees(root1.left if root1 else None, root2.left if root2 else None) + merged_root.right = self.mergeTrees(root1.right if root1 else None, root2.right if root2 else None) + + return merged_root ``` diff --git a/step3.md b/step3.md index 522daa6..25e614f 100644 --- a/step3.md +++ b/step3.md @@ -1,9 +1,29 @@ # Step 3 ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if not root1 and not root2: + return None + + val1 = root1.val if root1 else 0 + val2 = root2.val if root2 else 0 + merged_root = TreeNode(val1 + val2) + + merged_root.left = self.mergeTrees(root1.left if root1 else None, root2.left if root2 else None) + merged_root.right = self.mergeTrees(root1.right if root1 else None, root2.right if root2 else None) + + return merged_root ``` -1回目: 分 秒 -2回目: 分 秒 +1回目: 3分 7秒 + +2回目: 3分 8秒 -3回目: 分 秒 +3回目: 3分 9秒