5 ms·
This does not work, element/node shall have stable address so to be O(1) addressable. Elements/nodes can participate in multiple lists at the same time. Render
by c-smile 10y ago
This does not work, element/node shall have stable address so to be O(1) addressable.
Elements/nodes can participate in multiple lists at the same time. Rendering lists (a.k.a. rendering tree) and things like Document.querySelectorAll() that returns NodeList.
- deleted 10y ago[deleted]
- Someone 10y agoCan I conclude that your earlier statement "yet the structure ensures that there are no loops in the tree." isn't correct? I could easily create a loop like this: this.children[0] = this;
- wtetzner 10y agoHow could that happen, given that children isn't a pointer? vector<node*> children;
- Someone 10y agoIt is C++, and std::vector has an operator[] that makes a vector behave like a convention C 'pointer to data' for array accesses (in fact, the compiler likely will optimize the access to exactly what you would get if the declaration were of a C array of pointers to node)
- c-smile 10y agoThat case is easily manageable: you cannot insert/appendNode that has non-null parent. So you need to remove that node from its former parent first. Problem is that their solution by design contains loops. So on each tree traversal iteration you will need to access parent: Node* get_next_node(Node* that) { that = that->next; return that == that->parent->first_child ? nullptr : that; }