/** This method must be called before a pre-order traversal can be carried out in a new, or altered, graph. The method recursively traverses the graph in pre-order and updates the nodes' next_preorder links. */ Tree::Node* Tree::create_preorder_links (Tree::Node* n) { Node* last; ChildNodesIterator iter(n); if (!(bool)iter) { n->next_preorder = 0; last = n; } else { last = n; do { last->next_preorder = (Node*)iter; last = create_preorder_links((Node*)iter); ++iter; } while ((bool)iter); } return last; }
/*! This method must be called before a pre-order traversal can be carried out in a new, or altered, graph. The method recursively traverses the graph in pre-order and updates the nodes' next_preorder links. */ OA_ptr<Tree::Node> Tree::create_preorder_links (OA_ptr<Tree::Node> n) { OA_ptr<Node> last; ChildNodesIterator iter(*n); if (!iter.isValid()) { n->next_preorder = 0; last = n; } else { last = n; do { last->next_preorder = iter.current(); last = create_preorder_links(iter.current()); ++iter; } while (iter.isValid()); } return last; }