例题细节已经讲过(二叉搜索树的基础操作-CSDN博客),用非递归和递归均可实现,这里只给出递归参考代码:
public TreeNode deleteNode(TreeNode node, int key) {if (node == null) {return null;}if (key < node.val) {node.left = deleteNode(node.left, key);return node;}if (node.val < key) {node.right = deleteNode(node.right, key);return node;}if (node.left == null) { // 情况1 - 只有右孩子return node.right;}if (node.right == null) { // 情况2 - 只有左孩子return node.left;}TreeNode s = node.right; // 情况3 - 有两个孩子while (s.left != null) {s = s.left;}s.right = deleteNode(node.right, s.val);s.left = node.left;return s;
}
-
树节点 TreeNode 相当于例题中的 BSTNode
-
TreeNode 有属性:val, left, right,并未区分键值
-
BSTNode 有属性:key, value, left, right,区分了键值
-
-
它的 TreeNode 没有 key,比较用的是 TreeNode.val 属性与待删除 key 进行比较