### 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)

}
	}
}
bool Tree::edit_selected(bool p_force_edit) {
	TreeItem *s = get_selected();
	ERR_FAIL_NULL_V_MSG(s, false, "No item selected.");
	ensure_cursor_is_visible();
	int col = get_selected_column();
	ERR_FAIL_INDEX_V_MSG(col, columns.size(), false, "No item column selected.");
	if (!s->cells[col].editable && !p_force_edit) {
		return false;
	}
	Rect2 rect = s->get_meta("__focus_rect");
	popup_edited_item = s;
	popup_edited_item_col = col;
	const TreeItem::Cell &c = s->cells[col];
	if (c.mode == TreeItem::CELL_MODE_CHECK) {
		s->set_checked(col, !c.checked);
		item_edited(col, s);
		return true;
	} else if (c.mode == TreeItem::CELL_MODE_CUSTOM) {
		edited_item = s;
		edited_col = col;
		custom_popup_rect = Rect2i(get_global_position() + rect.position, rect.size);
		emit_signal(SNAME("custom_popup_edited"), false);
		item_edited(col, s);
		return true;
	} else if (c.mode == TreeItem::CELL_MODE_RANGE && !c.text.is_empty()) {
		popup_menu->clear();
		for (int i = 0; i < c.text.get_slice_count(","); i++) {