{ "cells": [ { "cell_type": "markdown", "id": "emotional-plastic", "metadata": {}, "source": [ "# Tree" ] }, { "cell_type": "code", "execution_count": 1, "id": "prepared-collect", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
" ], "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import IPython; IPython.display.HTML('''
''')" ] }, { "attachments": { "1ede7c46-9ddb-4fd4-a1cc-1270ca9c149e.jpg": { "image/jpeg": "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" } }, "cell_type": "markdown", "id": "f96110bc-6f67-4974-ae07-4f2b3fa5b9f6", "metadata": {}, "source": [ "## [94. Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/description/)\n", "\n", "Easy\n", "\n", "Given the root of a binary tree, return the inorder traversal of its nodes' values.\n", "\n", "![inorder_1.jpg](attachment:1ede7c46-9ddb-4fd4-a1cc-1270ca9c149e.jpg)\n", "\n", "Example 1:\n", "\n", " Input: root = [1,null,2,3]\n", " Output: [1,3,2]\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [0, 100].\n", " -100 <= Node.val <= 100\n", "\n", "Follow up: Recursive solution is trivial, could you do it iteratively?" ] }, { "cell_type": "code", "execution_count": 1, "id": "committed-heavy", "metadata": {}, "outputs": [], "source": [ "# recursion\n", "\n", "def inorderTraversal(root):\n", " if not root:\n", " return []\n", " else:\n", " return inorderTraversal(root.left) + [root.val] + inorderTraversal(root.right)" ] }, { "attachments": { "e2f29d48-650c-403c-9751-f8f47a7ba182.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "d8292c8f-e41d-44c2-8b0a-818e4b226611", "metadata": {}, "source": [ "## [100. Same Tree](https://leetcode.com/problems/same-tree/description/)\n", "\n", "Easy\n", "\n", "Given the roots of two binary trees p and q, write a function to check if they are the same or not.\n", "\n", "Two binary trees are considered the same if they are structurally identical, and the nodes have the same value.\n", " \n", "Example 1:\n", "\n", "![image.png](attachment:e2f29d48-650c-403c-9751-f8f47a7ba182.png)\n", "\n", " Input: p = [1,2,3], q = [1,2,3]\n", " Output: true\n", " \n", "Constraints:\n", "\n", " The number of nodes in both trees is in the range [0, 100].\n", " -10^4 <= Node.val <= 10^4" ] }, { "cell_type": "code", "execution_count": 1, "id": "ed69a530-6e94-47cd-829c-e322c20f4df9", "metadata": {}, "outputs": [], "source": [ "# recursion\n", "\n", "def isSameTree(p, q):\n", " if p is None and q is None:\n", " return True\n", " elif p or q:\n", " return False\n", " else:\n", " return isSameTree(p.left, q.left) and isSameTree(p.right, q.right) and (p.val == q.val)" ] }, { "attachments": { "19d72dbe-b0c0-44d2-8df1-acfc9159885f.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "dbac9265-047c-4c3c-a9da-9081c31cd03f", "metadata": {}, "source": [ "## [102. Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/)\n", "\n", "Medium\n", "\n", "Given the root of a binary tree, return the level order traversal of its nodes' values. (i.e., from left to right, level by level).\n", "\n", "\n", "Example 1:\n", "\n", "![image102.png](attachment:19d72dbe-b0c0-44d2-8df1-acfc9159885f.png)\n", "\n", " Input: root = [3,9,20,null,null,15,7]\n", " Output: [[3],[9,20],[15,7]] \n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [0, 2000].\n", " -1000 <= Node.val <= 1000\n", "\n" ] }, { "cell_type": "code", "execution_count": null, "id": "a327a04b-e8b7-4100-8943-a31475aa3414", "metadata": {}, "outputs": [], "source": [ "# BFS \n", "\n", "from collections import deque\n", "\n", "def levelOrder(root):\n", " q = deque()\n", " if root:\n", " q.append(root)\n", "\n", " res = []\n", " while q:\n", " level = []\n", " for _ in range(len(q)):\n", " node = q.popleft()\n", " level.append(node.val)\n", " if node.left:\n", " q.append(node.left)\n", " if node.right:\n", " q.append(node.right)\n", " \n", " res.append(level)\n", " return res" ] }, { "attachments": { "bdd304e4-3310-49c8-98b4-72e396323ff9.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "91a1b4e7-d762-4db6-9b74-185fd8d1648a", "metadata": {}, "source": [ "## [814. Binary Tree Pruning](https://leetcode.com/problems/binary-tree-pruning/)\n", "\n", "Medium\n", "\n", "Given the root of a binary tree, return the same tree where every subtree (of the given tree) not containing a 1 has been removed.\n", "\n", "A subtree of a node node is node plus every node that is a descendant of node.\n", "\n", "Example 1:\n", "\n", "![1028_2.png](attachment:bdd304e4-3310-49c8-98b4-72e396323ff9.png)\n", "\n", " Input: root = [1,null,0,0,1]\n", " Output: [1,null,0,null,1]\n", " Explanation: \n", " Only the red nodes satisfy the property \"every subtree not containing a 1\".\n", " The diagram on the right represents the answer.\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [1, 200].\n", " Node.val is either 0 or 1." ] }, { "cell_type": "code", "execution_count": null, "id": "1f67687b-9e8e-41d1-ae87-c3d9b5136f93", "metadata": {}, "outputs": [], "source": [ "# recursion\n", "\n", "def pruneTree(root):\n", " if not root:\n", " return None\n", " \n", " root.left = pruneTree(root.left)\n", " root.right = pruneTree(root.right)\n", "\n", " if root.val==0 and (not root.left) and (not root.right):\n", " return None\n", " else:\n", " return root" ] }, { "attachments": { "2e029daa-c953-4ae3-bd2c-6626d28e5e69.jpg": { "image/jpeg": "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" } }, "cell_type": "markdown", "id": "5abe7ed7-f4f7-4638-83da-dbef3b46e485", "metadata": {}, "source": [ "## [112. Path Sum](https://leetcode.com/problems/path-sum/)\n", "\n", "Easy\n", "\n", "Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum.\n", "\n", "A leaf is a node with no children.\n", "\n", "Example 1:\n", "\n", "![pathsum1.jpg](attachment:2e029daa-c953-4ae3-bd2c-6626d28e5e69.jpg)\n", "\n", " Input: root = [5,4,8,11,null,13,4,7,2,null,null,null,1], targetSum = 22\n", " Output: true\n", " Explanation: The root-to-leaf path with the target sum is shown.\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [0, 5000].\n", " -1000 <= Node.val <= 1000\n", " -1000 <= targetSum <= 1000" ] }, { "cell_type": "code", "execution_count": 1, "id": "0eff57e9-3cee-4adf-9fe8-d04088ef401e", "metadata": {}, "outputs": [], "source": [ "# recursion\n", "\n", "def hasPathSum(root, targetSum):\n", " if not root:\n", " return False\n", " \n", " if (not root.left) and (not root.right):\n", " return targetSum == root.val\n", " else:\n", " return hasPathSum(root.left, targetSum-root.val) or hasPathSum(root.right, targetSum-root.val)" ] }, { "attachments": { "9e55cd43-3c95-4173-b57f-7a118f377149.jpg": { "image/jpeg": "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" } }, "cell_type": "markdown", "id": "e6f422a4-26c7-41ab-9619-78512489c324", "metadata": {}, "source": [ "## [129. Sum Root to Leaf Numbers](https://leetcode.com/problems/sum-root-to-leaf-numbers/)\n", "\n", "Medium\n", "\n", "You are given the root of a binary tree containing digits from 0 to 9 only.\n", "\n", "Each root-to-leaf path in the tree represents a number.\n", "\n", " For example, the root-to-leaf path 1 -> 2 -> 3 represents the number 123.\n", "\n", "Return the total sum of all root-to-leaf numbers. Test cases are generated so that the answer will fit in a 32-bit integer.\n", "\n", "A leaf node is a node with no children. \n", "\n", "Example 1:\n", "\n", "![num1tree.jpg](attachment:9e55cd43-3c95-4173-b57f-7a118f377149.jpg)\n", "\n", " Input: root = [1,2,3]\n", " Output: 25\n", " Explanation:\n", " The root-to-leaf path 1->2 represents the number 12.\n", " The root-to-leaf path 1->3 represents the number 13.\n", " Therefore, sum = 12 + 13 = 25.\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [1, 1000].\n", " 0 <= Node.val <= 9\n", " The depth of the tree will not exceed 10." ] }, { "cell_type": "code", "execution_count": null, "id": "1d653d89-767d-413c-b8ec-f6ed785ee4ea", "metadata": {}, "outputs": [], "source": [ "# recursively returns list of strings like ['12', '13'] and sum them in the end\n", "\n", "def numbers(root):\n", " '''\n", " Returns a list of strings, for example ['12', '13'].\n", " '''\n", " if (not root.left) and (not root.right):\n", " return [str(root.val)]\n", " else:\n", " res = []\n", " if root and root.left:\n", " res += [str(root.val) + num for num in self.numbers(root.left)]\n", " if root and root.right:\n", " res += [str(root.val) + num for num in self.numbers(root.right)]\n", " return res\n", "\n", "def sumNumbers(root):\n", " return sum(int(num) for num in numbers(root))" ] }, { "cell_type": "code", "execution_count": null, "id": "3df03002-7bb4-4237-a4f5-7270e34d081b", "metadata": {}, "outputs": [], "source": [ "# DFS compute sum given current sum\n", "\n", "def dfs(self, root, cur_sum):\n", " if not root: # tree [0, 1] will break without this\n", " return 0\n", "\n", " cur_sum = 10*cur_sum + root.val\n", "\n", " if (not root.left) and (not root.right):\n", " return cur_sum\n", "\n", " sum_l = dfs(root.left, cur_sum)\n", " sum_r = dfs(root.right, cur_sum)\n", "\n", " return sum_l + sum_r\n", "\n", "def sumNumbers(root):\n", " return dfs(root, 0)" ] }, { "attachments": { "75e69ee1-7ed1-4ad5-9e3c-f435e932b306.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "a1a41085-1380-48a6-a3ae-83f420930a78", "metadata": {}, "source": [ "## [236. Lowest Common Ancestor of a Binary Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/)\n", "\n", "Medium\n", "\n", "Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.\n", "\n", "According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”\n", "\n", "Example 2:\n", "\n", "![image236.png](attachment:75e69ee1-7ed1-4ad5-9e3c-f435e932b306.png)\n", "\n", " Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4\n", " Output: 5\n", " Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [2, 10^5].\n", " -10^9 <= Node.val <= 10^9\n", " All Node.val are unique.\n", " p != q\n", " p and q will exist in the tree." ] }, { "cell_type": "code", "execution_count": 1, "id": "35521c80-d658-401c-b91d-ca0be9802147", "metadata": {}, "outputs": [], "source": [ "# LeetCode 上最快解答:DFS 從下向上(divide and conquer 先遞迴傳回結果再合併)\n", "\n", "def lowestCommonAncestor(root, p, q):\n", " if root in [p, q, None]:\n", " return root\n", "\n", " left = lowestCommonAncestor(root.left, p, q)\n", " right = lowestCommonAncestor(root.right, p, q)\n", "\n", " if left and right:\n", " return root\n", " elif left:\n", " return left\n", " else:\n", " return right" ] }, { "attachments": { "65b8da8d-1407-4fb3-8d1a-0fac5a22fc29.jpg": { "image/jpeg": "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" } }, "cell_type": "markdown", "id": "861da9fb-44db-4c38-81e8-2d199569125d", "metadata": {}, "source": [ "## [508. Most Frequent Subtree Sum](https://leetcode.com/problems/most-frequent-subtree-sum/)\n", "\n", "Medium\n", "\n", "Given the root of a binary tree, return the most frequent subtree sum. If there is a tie, return all the values with the highest frequency in any order.\n", "\n", "The subtree sum of a node is defined as the sum of all the node values formed by the subtree rooted at that node (including the node itself).\n", "\n", "Example 1:\n", "\n", "![freq1-tree.jpg](attachment:65b8da8d-1407-4fb3-8d1a-0fac5a22fc29.jpg)\n", "\n", " Input: root = [5,2,-3]\n", " Output: [2,-3,4]\n", "\n", "Constraints:\n", "\n", " The number of nodes in the tree is in the range [1, 10^4].\n", " -10^5 <= Node.val <= 10^5" ] }, { "cell_type": "code", "execution_count": null, "id": "0c004a26-5a1f-4190-bfb1-8698626191da", "metadata": {}, "outputs": [], "source": [ "from collections import defaultdict\n", "\n", "def findFrequentTreeSum(root):\n", " '''\n", " We need to know the the sum at each node and keep a counter. \n", " '''\n", " freq = defaultdict(int)\n", " def dfs(node):\n", " if not node:\n", " return 0\n", " else:\n", " subtree_sum = node.val + dfs(node.left) + dfs(node.right)\n", " freq[subtree_sum] += 1\n", " return subtree_sum\n", " dfs(root)\n", " max_freq = max(freq.values())\n", "\n", " return [s for s, f in freq.items() if freq[s]==max_freq]" ] }, { "cell_type": "code", "execution_count": 3, "id": "4ca5d740-8eec-419b-9237-606dc2b41db9", "metadata": {}, "outputs": [], "source": [ "# my ugly solution -- compute tree of subtree sum first\n", "\n", "from collections import defaultdict\n", "\n", "def findFrequentTreeSum(root):\n", " sums = serialize(tree_sum(root))\n", " \n", " freq = defaultdict(int)\n", " for s in sums:\n", " freq[s] += 1\n", "\n", " max_freq = max(freq.values())\n", " return [s for s, f in freq.items() if f==max_freq]\n", " \n", "def serialize(root):\n", " if not root:\n", " return []\n", " return serialize(root.left) + [root.val] + serialize(root.right)\n", "\n", "def tree_sum(root):\n", " if (not root) or ((not root.left) and (not root.right)):\n", " return root\n", "\n", " left = tree_sum(root.left)\n", " right = tree_sum(root.right)\n", "\n", " root.val += ((left.val if left else 0) + (right.val if right else 0))\n", " root.left = left\n", " root.right = right\n", "\n", " return root" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.12" } }, "nbformat": 4, "nbformat_minor": 5 }