题目给出的不是「每个结点的左右儿子编号」,而是一层一层从左到右写成的数组。数组第一个元素是根;某个位置如果没有结点,就记成 −1。
例如 1,2,3,4,5 表示:
1
/ \
二叉树是一种每个结点最多有两个儿子的树,这两个儿子分别称为左儿子和右儿子。
现在用层序数组给出一棵二叉树:按层从左到右依次写出每个结点的权值;如果某个位置没有结点,则在数组里用 −1 表示。数组中的第一个元素是根结点的权值。
请根据这个数组把二叉树构建出来,然后按结点权值依次输出它的前序遍历、中序遍历和后序遍历。
第一行一个整数 n,表示层序数组的长度。
第二行 n 个整数 a1,a2,…,an,表示层序数组。ai=−1 表示该位置为空结点,否则 ai 为对应结点的权值。
共三行。
同一行内相邻权值之间用一个空格分隔,行末不要有多余空格。
输入:
5
1 2 3 4 5
输出:
1 2 4 5 3
4 2 5 1 3
4 5 2 3 1
说明:
层序数组 1,2,3,4,5 对应的树为:
1
/ \
2 3
/ \
4 5
输入:
4
1 -1 2 3
输出:
1 2 3
1 3 2
3 2 1
说明:
层序数组 1,−1,2,3 表示:根的权值为 1,左儿子为空,右儿子权值为 2;结点 2 的左儿子权值为 3,右儿子为空。树的结构为:
1
\
2
/
3
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册