2分探索木の delete の疑似コードの後半の訂正 誤 第3刷 else // 子が2つ min = deletemin(node.right); // 右の子孫の最小値 min.right = right; min.left = node.left return min; } deletemin(node, parent) if (node.left == node) if (parent.left == node) parent.left = node.right; else parent.right = node.right; return node; else return deletemin(node.left, node) 第4刷 else // 子が2つ min = deletemin(node, node.right); // 右の子孫の最小値 min.right = node.right; min.left = node.left return min; } deletemin(node, parent) if (node.left == null) if (parent.left == node) parent.left = node.right; else parent.right = node.right; return node; else return deletemin(node.left, node) ------ 正 else // 自分を削除 & 子が2つ -> 右の子の最小値を自分のところに移す。 {right, min} = deletemin(node.right); min.right = right; min.left = node.left return min; } // 返り値 = {自分の場所に代わりに入るもの, 最小値} deletemin(node) if (node.left != null) {node.left, min} = deletemin(node.left); return {node, min} else return {node.right, node}