假设您有一棵这样的树:
_30_
/ \
10 20
/ / \
50 45 35
30 10 50 # # # 20 45 # # 35 # #
为此,足以在树中执行简单的预遍历:
void writeBinaryTree(BinaryTree *p, ostream &out) {
if (!p) {
out << "# ";
} else {
out << p->data << " ";
writeBinaryTree(p->left, out);
writeBinaryTree(p->right, out);
}
}
如您所见,#
符号用于表示空节点。
要将字符串反序列化为树,可以使用:
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);
}
}
就像我之前说的那样,此方法产生了二进制树的轻量表示形式。
如果树的节点是可以包含此符号本身的字符串,则可能导致潜在的问题。