From 9c9dfa3f166375e0d56d7e0ba7a4ee57c11f3409 Mon Sep 17 00:00:00 2001 From: SuperHotDogCat Date: Fri, 28 Jun 2024 22:33:46 +0900 Subject: [PATCH 1/3] phase1 --- arai60/merge_two_binary_trees/phase1.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 arai60/merge_two_binary_trees/phase1.py diff --git a/arai60/merge_two_binary_trees/phase1.py b/arai60/merge_two_binary_trees/phase1.py new file mode 100644 index 0000000..f3507fc --- /dev/null +++ b/arai60/merge_two_binary_trees/phase1.py @@ -0,0 +1,14 @@ +# 28分, merge方法に苦しんだ末にどうにか思いつく +# root1にroot2を統合するイメージ +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if root1 is None and root2 is None: + return + elif root1 is None: + root1 = TreeNode() + elif root2 is None: + root2 = TreeNode() + root1.val += root2.val + root1.left = self.mergeTrees(root1.left, root2.left) + root1.right = self.mergeTrees(root1.right, root2.right) + return root1 From 751ea944be0141ab2ee7e4aa3f99945a1869b310 Mon Sep 17 00:00:00 2001 From: SuperHotDogCat Date: Fri, 28 Jun 2024 22:33:54 +0900 Subject: [PATCH 2/3] phase2 --- arai60/merge_two_binary_trees/phase2.py | 40 +++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 arai60/merge_two_binary_trees/phase2.py diff --git a/arai60/merge_two_binary_trees/phase2.py b/arai60/merge_two_binary_trees/phase2.py new file mode 100644 index 0000000..5e0e60a --- /dev/null +++ b/arai60/merge_two_binary_trees/phase2.py @@ -0,0 +1,40 @@ +""" +Reference +fhiyo: https://github.com/fhiyo/leetcode/pull/25/files if not の場合早期returnすることができる(新しいのを作らなくても済むのでGood) +sakupan: https://github.com/sakupan102/arai60-practice/pull/24/files +hayashi-ay: https://github.com/hayashi-ay/leetcode/pull/12/files + +>>> +新しいのを作るか作らないのか、古い入力を壊すのか壊さないのか、共有するのかしないのか(変更しない前提ならばメモリー使用量が減る)、などのオプションがあって、自分がどれを「選択」したかを意識しましょう。 + +入力を破壊している。 +https://discord.com/channels/1084280443945353267/1252267683731345438/1252556045524537344 +出力を変更されるとキャッシュが変わって次からの呼び出しが狂う。 +https://discord.com/channels/1084280443945353267/1252267683731345438/1252591437485441024 + +phase1ではroot1のメモリ領域を使うイメージで作った。新しくTreeを作るイメージの時はまた別の書き方の方が良い +""" + +# root1に統合 +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if not root1: + return root2 + elif 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 + +# 新しくtreeを生成 +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if not root1: + return copy.deepcopy(root2) + elif not root2: + return copy.deepcopy(root1) + merged_tree = TreeNode(root1.val + root2.val) + merged_tree.left = self.mergeTrees(root1.left, root2.left) + merged_tree.right = self.mergeTrees(root1.right, root2.right) + return merged_tree From 23589b67b99a0b2fec87ebc3aabe7f0c3a9f8c17 Mon Sep 17 00:00:00 2001 From: SuperHotDogCat Date: Fri, 28 Jun 2024 22:34:01 +0900 Subject: [PATCH 3/3] phase3 --- arai60/merge_two_binary_trees/phase3.py | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 arai60/merge_two_binary_trees/phase3.py diff --git a/arai60/merge_two_binary_trees/phase3.py b/arai60/merge_two_binary_trees/phase3.py new file mode 100644 index 0000000..839ad97 --- /dev/null +++ b/arai60/merge_two_binary_trees/phase3.py @@ -0,0 +1,10 @@ +class Solution: + def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]: + if not root1: + return root2 + elif 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