我有一个由节点组成的树数据结构,我需要将其解析为表达式树。我的节点看起来像这样(简化):
public class Node
{
public Node Left { get; set; }
public Node Right { get; set; }
public Operation OperationType { get; set; }
public object Value { get; set; }
}
找到树的底部并向后构建表达式树的最佳/正确方法是什么?你先左右解析吗?
答案 0 :(得分:1)
如果您想首先到达树的底部,那么您可以进行“有序”或“后订购”搜索。 “有序”搜索将首先找到最左下方的节点,然后是该节点的父节点,然后是父节点的右手节点。在访问父节点之前,“后序”搜索将“访问”左子节点和右子节点。
考虑表达式'x + y'。有序搜索会产生:
'x', '+', 'y'
而后期搜索会产生:
'x', 'y', '+'
答案 1 :(得分:1)
如上所述,你先去哪里并不重要。但最常见的tree traversal算法。如果按照我的想法组织这棵树,建议按顺序排列:
(来自维基百科)要按顺序遍历非空二进制树,请在每个节点递归执行以下操作:
(这也称为对称遍历。)
答案 2 :(得分:0)
我认为首先要走的是哪个方向并不重要。然而,在一个从左到右语言占主导地位的世界中,如果你先离开,有人会更直观地理解你的代码。