一般来说,删除节点可分为两个步骤:
- 首先找到需要删除的节点;
- 如果找到了,删除它。
说明: 要求算法时间复杂度为 O(h),h 为树的高度。
示例:
root = [5,3,6,2,4,null,7] key = 3 5 / 3 6 / \ 2 4 7 给定需要删除的节点值是 3,所以我们首先找到 3 这个节点,然后删除它。 一个正确的答案是 [5,4,6,2,null,null,7], 如下图所示。 5 / 4 6 / 2 7 另一个正确答案是 [5,2,6,null,4,null,7]。 5 / 2 6 \ 4 7
解:
class TreeNode: def __init__(self, x): self.val = x self.left = None self.right = None class Solution: def deleteNode(self, root: TreeNode, key: int) -> TreeNode: if not root: return root if root.val > key: root.left = self.deleteNode(root.left, key) elif root.val < key: root.right = self.deleteNode(root.right, key) else: if not root.left or not root.right: root = root.left if root.left else root.right else: cur = root.right while cur.left: cur = cur.left root.val = cur.val root.right = self.deleteNode(root.right, cur.val) return root
原文地址:https://www.cnblogs.com/82nlf-xlqb/p/12022395.html
时间: 2024-10-10 06:57:30