我想我已经了解您的要求,但不太确定。
你有前缀表示法的表达式,因此这基本上是加载你在二叉树转储文件中的前缀表达式。
这是一个伪代码,描述了将表达式加载到树中的过程。
tree_node make_tree(字符串转储)
{
tok1 = get_tok(转储);
tok2 = get_tok(转储);
tok3 = get_tok(转储);
if (tok1 == 操作数)
{
节点 = make_new_node_with (tok1);
返回节点;
}
节点 = make_new_node_with (tok1);
node->left = make_tree (tok2);
node->right = make_tree (tok3);
返回节点;
}
递归调用1(AndExp TVal(OrExp FValTVal))
tok1 =AndExp
创建一个新的 node1
托克2 =TVal
tok3 =(OrExp FValTVal)
递归调用 2将TVal
node2 返回到调用 1,调用 1 将其与 node1 的左指针链接。
从调用 1递归调用 3。(OrExp FValTVal)
tok1 =ORExp
创建一个新的 node3
托克2 =FVal
tok3 =TVal
递归调用 3 withFVal
和call 4 withTVal
分别返回 node4 和 node5 的操作数值,它们从调用 3 链接到 node3 的左右链接。
不再考虑子表达式,递归返回起点。你有树的根。
( node1 )
|AndExp |
+---+---+
|
+------------+------------+
| |
( node2 ) ( node3 )
| TVal | | ORExp |
+---+---+ +---+---+
|
+-----------+-----------+
| |
( node4 ) ( node5 )
| FVal | | TVal |
+---+---+ +---+---+
如果有两个以上的操作数,则可以通过向树节点添加附加链接来类似地进行处理。
对于转储文件中的每个表达式,用逗号分隔将有单独的树,创建后可以遍历这些树。