0

我有一个关于使用 Boost Spirit 库生成的抽象语法树的问题。

我找到了很多关于在二叉搜索树中删除节点和子树的信息,但我找不到关于 AST 的相同信息。我在 AS 树中有一个节点,该节点是完整树的子树的根。现在我想删除节点及其所有子节点。

我不知道该怎么做,Boost Spirit 文档也没有帮助。

有没有人给我任何提示?

树是使用 (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 这就是答案。

如果我不能删除任何节点,有没有人有想法,如何在现有树的基础上创建一棵新树,跳过它的冗余部分。

4

0 回答 0