#g6011. [GESP6级模拟题]基因合并

[GESP6级模拟题]基因合并

题目背景

在研究某种生物的基因序列时,科学家发现其基因可以表示为一棵二叉树,编号规则如下:

  • 根基因编号为 11
  • 若某个基因编号为 ii,则它的左子基因编号为 2i2i,右子为 2i+12i+1

现在有两份来自不同个体的基因测序数据。科学家想将这两份数据合并

  • 如果某个编号在两份数据中都存在,则合并后的基因值为两值之和
  • 如果只在其中一份中存在,则保留该值

为了便于后续分析,需要按前序遍历(根 \to 左子树 \to 右子树)的顺序输出合并后所有非空节点的值。

题目描述

给定两棵二叉树各自的节点信息,输出合并后二叉树的前序遍历结果。

输入格式

第一行一个整数 n1n_1,表示第一棵树的节点个数。

接下来 n1n_1 行,每行两个整数 id,valid, val,表示节点编号和值。

接下来一行一个整数 n2n_2,表示第二棵树的节点个数。

接下来 n2n_2 行,每行两个整数 id,valid, val,表示节点编号和值。

输出格式

输出一行若干整数,表示合并后二叉树的前序遍历结果(每个节点的合并值)。 如果合并后整棵树为空,则输出 -1

样例输入

3
1 5
2 3
3 2
4
1 1
2 4
4 6
5 9

样例输出

6 7 6 9 2

样例解释

第一棵树:节点 1(5)1(5),子节点 2(3)2(3)3(2)3(2)。 第二棵树:节点 1(1)1(1),子节点 2(4)2(4),节点 22 的子节点 4(6)4(6)5(9)5(9)

合并后各节点值:

编号 树1 树2 合并
1 5 1 6
2 3 4 7
3 2 2
4 6 6
5 9 9

前序遍历顺序:根 11 \to 左子树 (245)(2 \to 4 \to 5) \to 右子树 (3)(3) 输出值依次:6,7,6,9,26, 7, 6, 9, 2

数据范围

1n1,n210001 \le n_1, n_2 \le 10001id20001 \le id \le 20001val100001 \le val \le 10000