【发布时间】:2011-09-27 04:39:41
【问题描述】:
假设给定一个级别顺序遍历输出。如何根据正确位置的数据构建二叉树?
请注意,我不是试图从给定的遍历输出中绘制树,而是从数组中读取遍历数据,然后通过 C 中的实际编码用它填充二叉树。
例如:
设 a[] = {A, B, C, D, E, F, G}; //数组中的遍历输出
所以层序树看起来像这样:
A
/ \
B C
/ \ / \
D E F G
假设有一个像这样的树节点结构:
typedef struct node
{
char data;
struct node* left;
struct node* right;
}tree;
现在我正在尝试读取 a[] 值并对这棵树进行编码,使其看起来像图表。有许多级别顺序遍历的例子,但找不到与二叉树构造的实际编码相关的任何内容。这是一种“逆向遍历”。
另外请注意,这不是家庭作业,但如果更多人会注意到它,我没有问题标记它。 :)
【问题讨论】:
-
在我看来,最简单的机制是将传入的数据存储到 heap 中。传入的数据是否适合堆属性?还是这棵树是二叉搜索树?
-
奇怪...通常根据一些比较填充二叉树。这显然不是这里的情况。
-
几乎总是有不止一棵树要从水平顺序遍历中构造出来。无法保证会再次生成创建遍历的确切树。
-
@DeepYellow,不,一个 二叉树 每个节点最多只有 2 个子节点。 二叉搜索树对节点进行排序。
-
@Bart,我意识到这棵树是二元的,不需要排序来满足定义。我的观点是,在没有排序要求的情况下使用二进制结构是不寻常的。我从来没有遇到过实际应用,你呢?
标签: c algorithm data-structures binary-tree