4 ms·
Unless sibling is sideways (same level of the tree) and children is downward (one level closer to the leaves). I haven't looked at the code but that's my first
by ameixaseca 4y ago
Unless sibling is sideways (same level of the tree) and children is downward (one level closer to the leaves).
I haven't looked at the code but that's my first impression given the nomenclature.
- c-smile 4y agoNo, 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.