C#算法,我需要处理一个仿二叉树,将这棵树变成DataTable,如下图所示

解决方案 »

  1.   

    既然是树形结构,为什么不用Xml,或用TreeView呢?它们之间是天然的对应关系。
    而DataTable是二维表,要正确表达树形结构,会要嵌套很多的父子表,费时费力啊。。
      

  2.   

    算法上,你自己已经给出了,就是深度优先的算法(dfs),类似的代码很多的,随便搜搜就有了。这里我给出一个建议,就是可以先生成一个list数组,每次访问到叶子节点的时候,把走过的路径加入到这个list数组中。最后再把这个list数组转换成table。
      

  3.   

    就是一个扫描二叉树的路径而已,学校时应该写过很多次了。不过C#我还真没写过。 public class binaryTreeNode
    {
    public binaryTreeNode left;
    public binaryTreeNode right;
    public int value;
    }

    //记录用的栈 (说实在还是用List好点)
    private Stack<string> tempstack = new Stack<string>();
    //临时一个数组用于存放结果 (可以看成datatable)
    private List<string> pathlist = new List<string>();

    private void GetPath(binaryTreeNode node)
    {
    //把节点加入栈
    tempstack.Push(node.value.ToString());
    //判断是否是叶子节点 : true leaf; false branch
    if(node.left == null && node.right == null)
    {
    //leaf, 输出栈里面的内容
    pathlist.Add(string.Join(",", tempstack.Reverse().ToArray()));
    //出栈
    tempstack.Pop();
    }
    else
    {
    //branch, 扫描子节点
    if (node.left != null) GetPath(node.left);
    if (node.right != null) GetPath(node.right);
    }
    }