文件中的二叉树视图

文件中的各种二叉树表示策略是什么,以便您可以轻松地重新创建树结构?我使用 C.
已邀请:

董宝中

赞同来自:

按顺序保存墙壁旁路并在文件中预先订购。 可以使用任何二进制树进行重建 inorder 和 preorder traversals[1].

[1] http://www.geeksforgeeks.org/c ... rsal/

奔跑吧少年

赞同来自:

至少你需要 2 树旁路能够建立精确的树。 因为从一个指定的旁路可以是几棵独特的树木。

例如,您可以保存 inorder 和 preorder 绕过文本文件中的二进制木头,然后按照下面的链接进行重新创建树时从那里处理它。

http://leetcode.com/2011/04/co ... .html

风见雨下

赞同来自:

这是一种天真的方式,假设你有什么 - 那似乎是:


struct bst {
int val;
struct bst *left; // NULL when no node
struct bst *right;
}


做这样的另一个结构:


struct bst_serial {
int val;
int left; // NULL when no node
int right;
}


然后 malloc 大量的
bst_serial

s, 这也是你的树的伟大:


struct bst_serial *serial_bst = malloc/sizeof/struct bst_serial/ * tree_size/;


现在在像这样的树上绕过树 /未经验证/:


int current_pos = 0;

int convert_node/bst *root/ {
int this_pos = current_pos;
current_pos++;

serial_bst[this_pos].val = root->val;
if/root->left != NULL/ {
serial_bst[this_pos].left = convert_node/root->left/;
} else {
serial_bst[this_pos].left = -1;
}

if/root->right != NULL/ {
serial_bst[this_pos].right = convert_node/root->right/;
} else {
serial_bst[this_pos].right = -1;
}
return this_pos;
}


现在你可以
write//

磁盘上的数组。 如果您编写爬行类型的函数
bst_serial

, 然后你甚至不需要反序列化它 - 你可以简单
mmap//

他的。 有关更多点,请不要先使用指针树 - 创建和增加数组
bst_serial

, 您如何创建二叉树。 然后,您的代码不需要担心他是否正在处理从磁盘或刚刚创建的树的树。

君笑尘

赞同来自:

按顺序排列顺序,并将节点值写入由新行分隔的文件中。 如果节点是纸张,则存储特殊符号 /例如, #/ 在表格的值之后。

当您读取文件之前,直到您获得“#”,请插入值并向左转到左侧。 如果你得到"#", 在右侧仍然没有物品,直到没有物品,然后立即走。 递归地进行。

要回复问题请先登录注册