如何解析树数据结构?

时间:2009-06-15 22:22:38

标签: .net parsing data-structures expression-trees

我有一个由节点组成的树数据结构,我需要将其解析为表达式树。我的节点看起来像这样(简化):

    public class Node
    {
        public Node Left { get; set; }
        public Node Right { get; set; }
        public Operation OperationType { get; set; }
        public object Value { get; set; }
    }

找到树的底部并向后构建表达式树的最佳/正确方法是什么?你先左右解析吗?

3 个答案:

答案 0 :(得分:1)

如果您想首先到达树的底部,那么您可以进行“有序”或“后订购”搜索。 “有序”搜索将首先找到最左下方的节点,然后是该节点的父节点,然后是父节点的右手节点。在访问父节点之前,“后序”搜索将“访问”左子节点和右子节点。

考虑表达式'x + y'。有序搜索会产生:

'x', '+', 'y'

而后期搜索会产生:

'x', 'y', '+'

答案 1 :(得分:1)

如上所述,你先去哪里并不重要。但最常见的tree traversal算法。如果按照我的想法组织这棵树,建议按顺序排列:

(来自维基百科)要按顺序遍历非空二进制树,请在每个节点递归执行以下操作:

  1. 遍历左子树。
  2. 访问root。
  3. 遍历正确的子树。
  4. (这也称为对称遍历。)

答案 2 :(得分:0)

我认为首先要走的是哪个方向并不重要。然而,在一个从左到右语言占主导地位的世界中,如果你先离开,有人会更直观地理解你的代码。