3 ms·
No, you didn't get it. You may have children accounted as DL list and so each Node should have m_next / m_previous node references. + Parent node to have m_fi
by c-smile 4y ago
No, you didn't get it.
You may have children accounted as DL list and so each Node should have m_next / m_previous node references.
+ Parent node to have m_first_child reference (if list is circular).
+ m_parent (Node) reference.
So you need 4 pointers per each non-terminal node. Or 3 pointers for terminals.
Otherwise (vector of children):
You need only m_parent (Node) reference in terminals.
And in container nodes additional vector<NodePtr> m_children; to store child references.
- eb2 4y agoYou don’t need parent because you can use a breadcrumb stack to track parents. You want sibling nodes otherwise you will have to traverse back to the root node sometimes to find a sibling.
- c-smile 4y ago> You don’t need parent You do need parent, check this: https://developer.mozilla.org/en-US/docs/Web/API/Node/parentNode https://developer.mozilla.org/en-US/docs/Web/API/Node/parent... > You want sibling nodes otherwise you will have to traverse back to the root node sometimes to find a sibling. The only need for this is in Node.nextSibling implementation: https://developer.mozilla.org/en-US/docs/Web/API/Node/nextSibling https://developer.mozilla.org/en-US/docs/Web/API/Node/nextSi... Where vector<>::find is pretty sufficient. But in reality (at least in my Sciter) node stores its index in parent's m_children so it is O(1) operation.