### Godot version

v4.0.beta9.mono.official [e780dc332]

### System information

Linux Mint 20.3 Cinnamon, NVIDIA Corporation TU106 [GeForce RTX 2070]

### Issue description

When calling EraseButton on a TreeItem with exactly one button, the following error occurs:

`ERROR: Index p_idx = 2 is out of bounds (cells[p_column].buttons.size() = 1).`

After investigating the cause is clear, the Erase function is taking the button id and passing it to the button array as an index. So if the first button you add has the id 0, and the second 1, and so on, the function actually works fine. Conversely if I set the button id to 99 the error says .

`ERROR: Index p_idx = 99 is out of bounds (cells[p_column].buttons.size() = 1).`

I have to assume that expecting the user to track the order that the buttons are stored in the internal array is not intentional. Should be simple enough to fix.

### Steps to reproduce


Just create a Tree with a TreeItem and then add a button to it with an id that is != 0
Then try to remove that button.

### Minimal reproduction project

c# (sorry I don't really do GDScript)

var Tree = new Tree();
var root = Tree.CreateItem();
var item = Tree.CreateItem(root);
item.AddButton(0, someRandomTexture2D, 99);
item.EraseButton(0, 99);
void set_checked(int p_column, bool p_checked);
	void set_indeterminate(int p_column, bool p_indeterminate);
	bool is_checked(int p_column) const;
	bool is_indeterminate(int p_column) const;
	void propagate_check(int p_column, bool p_emit_signal = true);
private:
	
	void _propagate_check_through_children(int p_column, bool p_checked, bool p_emit_signal);
	void _propagate_check_through_parents(int p_column, bool p_emit_signal);
	TreeItem *_get_prev_visible(bool p_wrap = false);
	TreeItem *_get_next_visible(bool p_wrap = false);
public:
	void set_text(int p_column, String p_text);
	String get_text(int p_column) const;
	void set_text_direction(int p_column, Control::TextDirection p_text_direction);
	Control::TextDirection get_text_direction(int p_column) const;
	void set_structured_text_bidi_override(int p_column, TextServer::StructuredTextParser p_parser);
	TextServer::StructuredTextParser get_structured_text_bidi_override(int p_column) const;
	void set_structured_text_bidi_override_options(int p_column, Array p_args);
	Array get_structured_text_bidi_override_options(int p_column) const;
	void set_language(int p_column, const String &p_language);
	String get_language(int p_column) const;
	void set_suffix(int p_column, String p_suffix);
	String get_suffix(int p_column) const;
	void set_icon(int p_column, const Ref<Texture2D> &p_icon);
	Ref<Texture2D> get_icon(int p_column) const;
	void set_icon_region(int p_column, const Rect2 &p_icon_region);
	Rect2 get_icon_region(int p_column) const;
	void set_icon_modulate(int p_column, const Color &p_modulate);