From 381a16856d2bcf23afd00eb0fcaf84ce9f627cc3 Mon Sep 17 00:00:00 2001 From: YanceyOfficial Date: Tue, 14 Nov 2023 20:29:33 +0800 Subject: [PATCH] feat: finish 99-recover-tree --- leetcode-docs/medium/95-generate-trees.mdx | 5 + leetcode-docs/medium/96-num-trees.mdx | 17 ++- leetcode-docs/medium/99-recover-tree.mdx | 103 ++++++++++++++++++ ...11\346\220\234\347\264\242\346\240\221.js" | 14 ++- ...11\346\220\234\347\264\242\346\240\221.js" | 60 ++++++++++ src/leetcode/rust/src/medium/mod.rs | 5 +- src/leetcode/rust/src/medium/question_99.rs | 1 + static/img/99-recover-tree-1.jpg | Bin 0 -> 14332 bytes static/img/99-recover-tree-2.jpg | Bin 0 -> 19255 bytes 9 files changed, 200 insertions(+), 5 deletions(-) create mode 100644 leetcode-docs/medium/99-recover-tree.mdx create mode 100644 "src/leetcode/javascript/medium/99.\346\201\242\345\244\215\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" create mode 100644 src/leetcode/rust/src/medium/question_99.rs create mode 100644 static/img/99-recover-tree-1.jpg create mode 100644 static/img/99-recover-tree-2.jpg diff --git a/leetcode-docs/medium/95-generate-trees.mdx b/leetcode-docs/medium/95-generate-trees.mdx index a0406708..d707eb6d 100644 --- a/leetcode-docs/medium/95-generate-trees.mdx +++ b/leetcode-docs/medium/95-generate-trees.mdx @@ -78,3 +78,8 @@ var generateTrees = function (n) { return dfs(1, n) } ``` + +## 复杂度分析 + +- 时间复杂度:卡特兰数 +- 空间复杂度: 卡特兰数 diff --git a/leetcode-docs/medium/96-num-trees.mdx b/leetcode-docs/medium/96-num-trees.mdx index fcba45c4..b58ed937 100644 --- a/leetcode-docs/medium/96-num-trees.mdx +++ b/leetcode-docs/medium/96-num-trees.mdx @@ -38,12 +38,25 @@ keywords: ## 题解 -这里是题解这里是题解这里是题解这里是题解这里是题解 +给定一个有序序列 `1` 到 `n`,为了构建出一棵二叉搜索树, 我们可以遍历每个数字 `i`, 将该数字作为树根, 将 `1` 到 `i - 1` 序列作为左子树,将 `i + 1` 到 `n` 序列作为右子树. +接着我们可以按照同样的方式递归构建左子树和右子树. ```ts /** * @param {number} n * @return {number} */ -var numTrees = function (n) {} +var numTrees = function (n) { + const dp = new Array(n + 1).fill(0) + dp[0] = 1 + dp[1] = 1 + + for (let i = 2; i <= n; i++) { + for (let j = 1; j <= i; j++) { + dp[i] += dp[j - 1] * dp[i - j] + } + } + + return dp[n] +} ``` diff --git a/leetcode-docs/medium/99-recover-tree.mdx b/leetcode-docs/medium/99-recover-tree.mdx new file mode 100644 index 00000000..4533e707 --- /dev/null +++ b/leetcode-docs/medium/99-recover-tree.mdx @@ -0,0 +1,103 @@ +--- +id: 99-recover-tree +title: 恢复二叉搜索树 +sidebar_label: 99. 恢复二叉搜索树 +keywords: + - Tree, BST +--- + +:::success Tips +题目类型: Tree, BST +::: + +## 题目 + +给你二叉搜索树的根节点 `root`. 该树中的**恰好两个节点**的值被错误地交换. 请在不改变其结构的情况下, 恢复这棵树. + +:::note 提示: + +- 树上节点的数目在范围 `[2, 1000]` 内 +- `-2³¹ <= Node.val <= 2³¹ - 1` + +::: + +:::info 示例 + +![33-search](../../static/img/99-recover-tree-1.jpg) + +```ts +输入:root = [1,3,null,null,2] +输出:[3,1,null,null,2] +解释:3 不能是 1 的左孩子,因为 3 > 1 。交换 1 和 3 使二叉搜索树有效。 +``` + +![33-search](../../static/img/99-recover-tree-2.jpg) + +```ts +输入:root = [3,1,4,null,null,2] +输出:[2,1,4,null,null,3] +解释:2 不能在 3 的右子树中,因为 2 < 3 。交换 2 和 3 使二叉搜索树有效。 +``` + +::: + +## 题解 + +1. 由于是 BST, 所以使用中序遍历, 把所有节点存储到 `list` 中 +2. 遍历这个列表 `list`, 由于 BST 的中序遍历应当是从小到大排列的, 所以如果前面的 val 大于了后面的 val, 说明后面这个应当靠前. +3. 找到两个需要交换的, 交换他们的值即可 + +```ts +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {void} Do not return anything, modify root in-place instead. + */ +var recoverTree = function (root) { + const list = [] + inOrder(root, list) + let x = null + let y = null + + for (let i = 0; i < list.length - 1; i++) { + if (list[i].val > list[i + 1].val) { + y = list[i + 1] + if (!x) x = list[i] + } + } + + if (x && y) { + const tmp = x.val + x.val = y.val + y.val = tmp + } +} + +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @param {TreeNode[]} list + * @return {void} Do not return anything, modify root in-place instead. + */ +var inOrder = function (root, list) { + if (!root) return null + + inOrder(root.left, list) + list.push(root) + inOrder(root.right, list) +} +``` diff --git "a/src/leetcode/javascript/medium/96.\344\270\215\345\220\214\347\232\204\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" "b/src/leetcode/javascript/medium/96.\344\270\215\345\220\214\347\232\204\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" index 0ca0f335..395a7bb0 100644 --- "a/src/leetcode/javascript/medium/96.\344\270\215\345\220\214\347\232\204\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" +++ "b/src/leetcode/javascript/medium/96.\344\270\215\345\220\214\347\232\204\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" @@ -9,5 +9,17 @@ * @param {number} n * @return {number} */ -var numTrees = function (n) {} +var numTrees = function (n) { + const dp = new Array(n + 1).fill(0) + dp[0] = 1 + dp[1] = 1 + + for (let i = 2; i <= n; i++) { + for (let j = 1; j <= i; j++) { + dp[i] += dp[j - 1] * dp[i - j] + } + } + + return dp[n] +} // @lc code=end diff --git "a/src/leetcode/javascript/medium/99.\346\201\242\345\244\215\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" "b/src/leetcode/javascript/medium/99.\346\201\242\345\244\215\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" new file mode 100644 index 00000000..05f559b8 --- /dev/null +++ "b/src/leetcode/javascript/medium/99.\346\201\242\345\244\215\344\272\214\345\217\211\346\220\234\347\264\242\346\240\221.js" @@ -0,0 +1,60 @@ +/* + * @lc app=leetcode.cn id=99 lang=javascript + * + * [99] 恢复二叉搜索树 + */ + +// @lc code=start +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @return {void} Do not return anything, modify root in-place instead. + */ +var recoverTree = function (root) { + const list = [] + inOrder(root, list) + let x = null + let y = null + + for (let i = 0; i < list.length - 1; i++) { + if (list[i].val > list[i + 1].val) { + y = list[i + 1] + if (!x) x = list[i] + } + } + + if (x && y) { + const tmp = x.val + x.val = y.val + y.val = tmp + } +} + +/** + * Definition for a binary tree node. + * function TreeNode(val, left, right) { + * this.val = (val===undefined ? 0 : val) + * this.left = (left===undefined ? null : left) + * this.right = (right===undefined ? null : right) + * } + */ +/** + * @param {TreeNode} root + * @param {TreeNode[]} list + * @return {void} Do not return anything, modify root in-place instead. + */ +var inOrder = function (root, list) { + if (!root) return null + + inOrder(root.left, list) + list.push(root) + inOrder(root.right, list) +} +// @lc code=end diff --git a/src/leetcode/rust/src/medium/mod.rs b/src/leetcode/rust/src/medium/mod.rs index 3594efb6..4b4e578e 100644 --- a/src/leetcode/rust/src/medium/mod.rs +++ b/src/leetcode/rust/src/medium/mod.rs @@ -1,5 +1,4 @@ pub mod question_11; -pub mod question_2; pub mod question_1143; pub mod question_12; pub mod question_120; @@ -11,6 +10,7 @@ pub mod question_16; pub mod question_17; pub mod question_19; pub mod question_198; +pub mod question_2; pub mod question_213; pub mod question_215; pub mod question_22; @@ -87,4 +87,5 @@ pub mod question_90; pub mod question_91; pub mod question_926; pub mod question_93; -pub mod question_97; \ No newline at end of file +pub mod question_97; +pub mod question_99; \ No newline at end of file diff --git a/src/leetcode/rust/src/medium/question_99.rs b/src/leetcode/rust/src/medium/question_99.rs new file mode 100644 index 00000000..1c483194 --- /dev/null +++ b/src/leetcode/rust/src/medium/question_99.rs @@ -0,0 +1 @@ +pub fn foo() -> () {} \ No newline at end of file diff --git a/static/img/99-recover-tree-1.jpg b/static/img/99-recover-tree-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f95ab3f0c40047fa1977023b16825ce96a6a38f2 GIT binary patch literal 14332 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 k=*{5E@$aAfrm4l2PuYfVe}e>3sF0MAVJBme*a literal 0 HcmV?d00001 diff --git a/static/img/99-recover-tree-2.jpg b/static/img/99-recover-tree-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f23c1e9da5e3510c34df4e65aee2d029109cadba GIT binary patch literal 19255 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 X;mJ0I6I=QD4c!sZ_&>}#^;6HE$Y$6Q literal 0 HcmV?d00001