单点时限: 2.0 sec
内存限制: 256 MB
前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系)。下面介绍树的双亲存储法。
tree[n]
来存储图1中的这棵树,则树中每个结点存储在 tree[n]
中的下标等于它的编号值,而且在数组 tree[n]
中, 每个元素是一个结构体,它包含两个成员,data
和 parent
:其中 tree[i].data
存储一个结点的值, tree[i].parent
存储该结点的双亲结点在该数组中的下标。根结点 tree[O].parent=-1
, 图2为图1中树的存储数组。现在给出一棵树的顺序存储结构,打印树的后序遍历。
第一行一个整数 $n$ $(1 \leq n \leq 100~000)$,表示有 $n$ 个节点,节点的编号从 $0$ 到 $n-1$。
接下来一行 $n$ 个整数,依次表示每个节点的双亲 (tree[i].parent
)。数据保证合法,能构成一棵树,并且 tree[0].parent=-1
。
输出树的后序遍历。
10 -1 0 0 0 1 1 1 3 3 8
4 5 6 1 2 7 9 8 3 0