例题细节已经讲过(二叉搜索树的基础操作-优快云博客),用非递归和递归均可实现,这里只给出递归参考代码:
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 进行比较