Saving a Binary tree to a file [closed]

我的梦境 提交于 2020-01-01 12:37:11

问题


I have a non-balanced (not binary-search) binary tree Need to incode (and later decode) it to txt file. How can I do it in efficient way?

I found this link which talks about similar (same) problem,but it is obvious for me


回答1:


Please look at this on LeetCode.

I like this solution because it's relatively efficient and produces light output files.

Assuming that you've got a tree like this:

    _30_ 
   /    \    
  10    20
 /     /  \ 
50    45  35

This solution lets you serialize it to such an output text file:

30 10 50 # # # 20 45 # # 35 # #

To do this it's enough to perform simple pre-order traversal through the tree:

void writeBinaryTree(BinaryTree *p, ostream &out) {
  if (!p) {
    out << "# ";
  } else {
    out << p->data << " ";
    writeBinaryTree(p->left, out);
    writeBinaryTree(p->right, out);
  }
}

As you can see, a # symbol is used to represent the null node.

To deserialize this string into a tree you can use:

void readBinaryTree(BinaryTree *&p, ifstream &fin) {
  int token;
  bool isNumber;
  if (!readNextToken(token, fin, isNumber)) 
    return;
  if (isNumber) {
    p = new BinaryTree(token);
    readBinaryTree(p->left, fin);
    readBinaryTree(p->right, fin);
  }
}

As I said before, this method produces a lightweight representation of Binary Tree.

Of course it has one serious drawback: it requires a symbol to represent the null node.

It can cause potential problems if the nodes of tree are strings that can contain this symbol itself.



来源:https://stackoverflow.com/questions/20005784/saving-a-binary-tree-to-a-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!