450. 删除二叉搜索树中的节点
给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。
一般来说,删除节点可分为两个步骤:
首先找到需要删除的节点;
如果找到了,删除它。
说明: 要求算法时间复杂度为 O(h),h 为树的高度。
链接
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
   | 
 
 
 
 
 
 
 
 
 
 
 
 
  function deleteNode(root: TreeNode | null, key: number): TreeNode | null {   if (root === null) return null;   if (key > root.val) root.right = deleteNode(root.right, key);   else if (key < root.val) root.left = deleteNode(root.left, key)   else if (root.left !== null && root.right !== null) {          if (root.right.left === null) {       root.val = root.right.val       root.right = root.right.right     } else {              let min = root.right       let minParent = root       while(min.left !== null) {         minParent = min         min = min.left       }       root.val = min.val       minParent.left = min.right     }   } else {     root = root.left ? root.left : root.right   }   return root };
 
  |