diff --git a/problems/0450.删除二叉搜索树中的节点.md b/problems/0450.删除二叉搜索树中的节点.md index 32dd862e..23e710ad 100644 --- a/problems/0450.删除二叉搜索树中的节点.md +++ b/problems/0450.删除二叉搜索树中的节点.md @@ -485,6 +485,41 @@ var deleteNode = function (root, key) { }; ``` +迭代 +``` javascript +var deleteNode = function (root, key) { + const deleteOneNode = target => { + if (!target) return target + if (!target.right) return target.left + let cur = target.right + while (cur.left) { + cur = cur.left + } + cur.left = target.left + return target.right + } + + if (!root) return root + let cur = root + let pre = null + while (cur) { + if (cur.val === key) break + pre = cur + cur.val > key ? cur = cur.left : cur = cur.right + } + if (!pre) { + return deleteOneNode(cur) + } + if (pre.left && pre.left.val === key) { + pre.left = deleteOneNode(cur) + } + if (pre.right && pre.right.val === key) { + pre.right = deleteOneNode(cur) + } + return root +} +``` + -----------------------