From 301dd3e13984a2d6de4711bc08417aa3bd2a1e8d Mon Sep 17 00:00:00 2001 From: Steve2020 <841532108@qq.com> Date: Sat, 12 Mar 2022 00:15:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=880450.=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E4=BA=8C=E5=8F=89=E6=90=9C=E7=B4=A2=E6=A0=91=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=8A=82=E7=82=B9.md=EF=BC=89=EF=BC=9A=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0typescript=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0450.删除二叉搜索树中的节点.md | 64 +++++++++++++++++++ 1 file changed, 64 insertions(+) diff --git a/problems/0450.删除二叉搜索树中的节点.md b/problems/0450.删除二叉搜索树中的节点.md index 2e333530..cc29bea4 100644 --- a/problems/0450.删除二叉搜索树中的节点.md +++ b/problems/0450.删除二叉搜索树中的节点.md @@ -518,6 +518,70 @@ var deleteNode = function (root, key) { } ``` +## TypeScript + +> 递归法: + +```typescript +function deleteNode(root: TreeNode | null, key: number): TreeNode | null { + if (root === null) return null; + if (root.val === key) { + if (root.left === null && root.right === null) return null; + if (root.left === null) return root.right; + if (root.right === null) return root.left; + let curNode: TreeNode = root.right; + while (curNode.left !== null) { + curNode = curNode.left; + } + curNode.left = root.left; + return root.right; + } + if (root.val > key) root.left = deleteNode(root.left, key); + if (root.val < key) root.right = deleteNode(root.right, key); + return root; +}; +``` + +> 迭代法: + +```typescript +function deleteNode(root: TreeNode | null, key: number): TreeNode | null { + function removeTargetNode(root: TreeNode): TreeNode | null { + if (root.left === null && root.right === null) return null; + if (root.right === null) return root.left; + if (root.left === null) return root.right; + let curNode: TreeNode | null = root.right; + while (curNode.left !== null) { + curNode = curNode.left; + } + curNode.left = root.left; + return root.right; + } + let preNode: TreeNode | null = null, + curNode: TreeNode | null = root; + while (curNode !== null) { + if (curNode.val === key) break; + preNode = curNode; + if (curNode.val > key) { + curNode = curNode.left; + } else { + curNode = curNode.right; + } + } + if (curNode === null) return root; + if (preNode === null) { + // 删除头节点 + return removeTargetNode(curNode); + } + if (preNode.val > key) { + preNode.left = removeTargetNode(curNode); + } else { + preNode.right = removeTargetNode(curNode); + } + return root; +}; +``` + -----------------------