如图,现有若干已建好的树结构,请问如何将它们保存下来呢?考虑过HashTable,方便查找,使用Add(Key,Value)添加,这里Key用根节点字符串,以后查找的时候直接找根节点名字就行了。但是Value不知道应该是什么类型的数据?如果HashTable不行的话,有没有什么办法可以将整个树结构保存下来呢,存到某个表里,以后需要调用的时候直接查找出来?hashtable

解决方案 »

  1.   

    如果是保存到文件或者流里,可以用序列化的思想,按照先根遍历方式保存就可以,保存节点的时候同时保存其左子树和右子树是否为空的标志,但如果要保存到数据库表中,可以把每个节点作为一行存入,并保存其父节点的id,左右子树根节点id,利用父节点id和左右孩子id重建整个树,重建的时候建立一个Dictionary,key是id,value是节点,很容易把树结构重新构造出来,
      

  2.   

    不要一个劲地介绍你做不了的东西,你应该拿出一种最简单的表示方式——你能做得了的方式。例如你可以写:    var t1= "节点1=>A,B,C|A=>D|B=>E|E=>F,G|G=>H"
        var t2= "节点2.......总之,你要拿出一种你能做得了的东西问别人具体的问题。我比较懒得回答别人随便扔出来的问题,而更愿意回答双向交流式的问题。
         
      

  3.   

    为什么这样说呢?因为所谓一上来就抖出一堆“HashTable、Add(key,Value)”名词儿的方式,基本上仅见于刚工作、喜欢攀比、丝毫没有学过工作方法和工作习惯的人。这是依据时髦名词儿来设计,你扔出这类名词只不过是想引导别人也胡乱回答。有工作经验的人是会多想几种可行的方案,哪怕是很笨拙的方案也不怕,但是都是可行的方案,然后逐步提升方案水平(例如性能)。所以提问往往应首先踏实地给出自己已经逻辑上正确的方案,让别人来优化它。
      

  4.   

    本帖最后由 caozhy 于 2013-05-20 08:48:52 编辑
      

  5.   


    老师你这种方法是已知某个树结构,然后照着它来建立。那如果树结构是动态建立的,根本不知道是啥样,又该如何解决呢?我的天!我是给你一点提示,至于怎么把树序列化成这样一个xml,难道你还不会?
    字符串拼接都不会???
      

  6.   

    不考虑数据库表方法吧
    照您说的第一种方法,是否类似于数据结构中定义指针来遍历整个树?不过我的需求有一些麻烦,具体说是这样的:
    1.根据数据动态建立若干个树结构,然后将每个树所有节点结构保存下来,并添加一个标记(以后会通过这个标记来查找到这棵树),再将所有树结构保存下来(这里不知道标记该是什么类型的?)
    2.然后进行一些其他操作......
    3.回头查找到某一棵树,然后将其所有节点放入treeView控件中显示出来。上面的关键问题就是:如何把一棵树保存下来?可否按您的思路提供一些代码例子?谢谢!
      

  7.   


    老师你这种方法是已知某个树结构,然后照着它来建立。那如果树结构是动态建立的,根本不知道是啥样,又该如何解决呢?我的天!我是给你一点提示,至于怎么把树序列化成这样一个xml,难道你还不会?
    字符串拼接都不会???至于怎么把树序列化成这样一个xml,难道你还不会?
    字符串拼接都不会???

    额,的确不太明白,是否需要先把XML基础学一遍?老师可否提供点教学文章?我百度了一下,没搜到。
      

  8.   

    不了解你的树,不过既然是一棵树,不管是否用指针把节点连接起来,都可以进行先跟遍历,你既然可以把它填充一个treeview,那么肯定能知道一个节点的子节点有哪些,只要知道节点的子节点,就可以进行先跟遍历。你如果问的是如何在内存中保存表示一棵树,或者多个树,那么可以按照《数据结构》中的标准方法表示,c#有引用,完全可以实现,你在内存中建立树之后,可以按照《数据结构》中的标准方法实现加入节点,删除节点等操作,
      

  9.   

    1.xml是天生半结构化数据,也天生能表达树
    2.微软treenode类本身就可以表达,并且能简单方便序列化
    3.实在不行你就sql2008把,sql2008有一个新增类型的字段用来表示层级数据滴玩意要是你还觉着不行,那么你就只好自己手动玩点高级滴了,自己用自己的数据结构表达了
      

  10.   

    xml + 序列化 完全可以完成
      

  11.   

    话说 我首先想到的是 ID和PID...ORACLE中提供很好支持 一条语句就能查出这样的树型结构。