如何把二叉树保存在文件里,然后再读出来????

解决方案 »

  1.   

    构造这样一个二叉数的struct,按struct的形式写到文件中。
      

  2.   

    通过遍历树的形式将每个节点写入文件,读出来的时候是个逆过程,不过这简直不叫方法,希望看到好的方法,期待ing
      

  3.   

    递归 ,这里假设各个节点的大小相同,如果不同,则在writefile()里做处理
    void save_bin_tree(TREE_NODE *pRoot)
    {
        writefile( pRoot->data);
        if ( pRoot->lchild )
          save_bin_tree(pRoot->lchild);
        if ( pRoot->rchild)
          save_bin_tree(pRoot->rchild);
    }
      

  4.   

    注意把lchild,rchild的地址也保存起来就行了.这样读取的时候就方便了.
      

  5.   

    lchild,rchild有什么意义?不理解
      

  6.   

    存的时候好存,关键是怎么在读的时候能够动态生成二叉树,也就是树的关系如何保存。anyiflyer讲把地址保存起来,可是读取时应该是动态生成的,地址会改变,所以保存起来的值应该没有用,不过也可以用来判断有无child。我想可以这样做:
    void save_bin_tree(CArchive& ar, TREE_NODE *pRoot)
    {
        ar << pRoot->data;
        if ( pRoot->lchild )
        {
          ar << 1;
          save_bin_tree(pRoot->lchild);
        }
        else
        {
          ar << 0;
        }
        if ( pRoot->rchild)
        {
          ar << 2;
          save_bin_tree(pRoot->rchild);
        }
        else
        {
          ar << 0;
        }
    }void load_bin_tree(CArchive& ar, TREE_NODE *pRoot)
    {
        int i;
        ar >> pRoot->data;
        ar >> i;
        if ( i==1 )
        {
          pRoot->lchild = new TREE_NODE;
          load_bin_tree(pRoot->lchild);
        }
        else
        {
          pRoot->lchild = null;
        }    ar >> i;
        if ( i==2 )
        {
          pRoot->rchild = new TREE_NODE;
          load_bin_tree(pRoot->rchild);
        }
        else
        {
          pRoot->rchild = null;
        }
    }哪位兄弟有好的方法请发表高见。