### Godot version

4.2 Stable

### System information

Linux

### Issue description

Calling TreeItem set_text() on a TreeItem that was removed via remove_child() causes debugging to end and the application to close without any error message.

### Steps to reproduce

Run the included example to get the debugger to crash. Comment out "treeItem.remove_child(subTreeItem)" for normal behaviour. 

### Minimal reproduction project

[treeItemCrash.zip](https://github.com/godotengine/godot/files/13534005/treeItemCrash.zip)

ERR_FAIL_INDEX_V(p_column, cells.size(), false);
	return cells[p_column].checked;
}
bool TreeItem::is_indeterminate(int p_column) const {
	ERR_FAIL_INDEX_V(p_column, cells.size(), false);
	return cells[p_column].indeterminate;
}
void TreeItem::propagate_check(int p_column, bool p_emit_signal) {
	bool ch = cells[p_column].checked;
	if (p_emit_signal) {
		tree->emit_signal(SNAME("check_propagated_to_item"), this, p_column);
	}
	_propagate_check_through_children(p_column, ch, p_emit_signal);
	_propagate_check_through_parents(p_column, p_emit_signal);
}
void TreeItem::_propagate_check_through_children(int p_column, bool p_checked, bool p_emit_signal) {
	TreeItem *current = get_first_child();
	while (current) {
		current->set_checked(p_column, p_checked);
		if (p_emit_signal) {
			current->tree->emit_signal(SNAME("check_propagated_to_item"), current, p_column);
		}
		current->_propagate_check_through_children(p_column, p_checked, p_emit_signal);
		current = current->get_next();
	}
}
void TreeItem::_propagate_check_through_parents(int p_column, bool p_emit_signal) {