我有一个关于使用Boost Spirit Library生成的抽象语法树的问题。
我发现了很多关于在二进制搜索树中删除节点和子树的信息,但是我找不到与AST相同的信息。我在AS-Tree中有一个节点,该节点是完整树的子树的根。现在我想删除节点及其所有子节点。
我不知道该怎么做,而且Boost Spirit Documentation也没有帮助。
有人对我有任何提示吗?
使用(Boost 1.46.1)生成树:
tree_parse_info<> info = ast_parse(expression.c_str(), parser, skipparser);
表达式是这样的:
(variable_17 OR variable_18) AND function( variable_17) <= 30 OR function( subkey_18) <= 30
我用
tree_match<iterator_t>::tree_iterator tree_it = info.trees.begin();
获取树的开头,然后我检查其中一个子树是否多余(与删除本身没有任何关系)。 `然后我使用
遍历树 tree_match<iterator_t>::tree_iterator children_it = tree_it->children.begin()
并与其子项调用相同的函数(递归)。我无法发布完整的代码,但这是最重要的部分。我想,我可以遍历冗余子树的叶子节点,并将它们设置为null,或类似的东西。然后我再次上到树上,一个接一个地删除所有其他孩子。但是到目前为止还没有任何工作。
遍历树的示例:The Traversing 这就是答案。
如果我无法删除任何节点,是否有人有任何想法,如何根据现有树创建一个新树,滑动它的多余部分。