【发布时间】:2019-08-12 15:45:26
【问题描述】:
我正在尝试通过带注释的语法树进行递归。
我的目标是在看到特定类型的节点后增加一个计数器。
Void *DFS(State *N, IrNode *node, int Counter)
{
Counter=0
if (node->irLeftChild == NULL &&
node->irRightChild == NULL &&
node->isVisited == false &&
node->type == kNewtonIrNodeType_Tidentifier)
{
Counter+=1
node->isVisited = true;
return ;
}
DFS(N, node->irLeftChild);
DFS(N, node->irRightChild);
}
有没有更好的方法来递归遍历树?
【问题讨论】:
-
那是因为你没有保留/返回两个递归调用的结果。
-
您确定要退货吗? - 一个节点有两个孩子的结果应该是什么?
-
如果您的目标是增加特定类型的所有叶节点,则实际上不应该有返回值。如果您确实只想执行一次并返回一个节点,那么您对 DFS 的调用需要返回一个节点或 null
-
好的,在这种情况下我将如何集成计数器?我已经修改了上面的代码。这是个好方法吗?
-
对错误道歉,我现在已经编辑了代码
标签: c algorithm data-structures abstract-syntax-tree