SZ#G6BT25. 【GESP强化 六级】二叉搜索树的两数之和

提交4 通过2
通过率50%
时间限制2000ms
内存限制256MiB
    ID: 11427 传统题 2000ms 256MiB 尝试: 4 已通过: 2 难度: 普及 上传者: 标签>GESPGESP强化C++c++编程题二叉树二叉搜索树哈希集合遍历3星

题目描述

给定一棵非空二叉搜索树和一个整数 KK,请判断树中是否存在两个不同的节点,使这两个节点的值之和恰好等于 KK

输入保证树中所有节点值互不相同。同一个节点不能被使用两次;即使 KK 恰好等于某个节点值的两倍,也必须实际存在两个不同节点才能满足条件。

输入格式

第一行一个整数 nn,表示二叉树的节点数。节点编号为 11nn,根节点编号为 11;当 n=0n=0 时表示空树。

n>0n>0 时,第二行包含 nn 个整数 v1,v2,,vnv_1,v_2,\ldots,v_n,其中 viv_i 表示节点 ii 保存的值。

接下来 nn 行,第 ii 行包含两个整数 li,ril_i,r_i,分别表示节点 ii 的左孩子编号和右孩子编号。编号 00 表示相应孩子不存在。输入保证这些数据构成一棵合法二叉树。

最后一行输入一个整数 KK,表示目标和。

输出格式

如果存在两个不同节点的值之和等于 KK,输出 true;否则输出 false

1
0
0 0
20000
false
2
10000 -10000
2 0
0 0
0
true
3
0 -10000 10000
2 3
0 0
0 0
20000
false

数据范围与约定

  • 二叉树的节点个数的范围是 [1, 10410^4 ]
  • 104-10^4 ≤ v_i ≤ 10410^4
  • 题目数据保证,输入的 root 是一棵 有效 的二叉搜索树
  • 105-10^5 ≤ k ≤ 10510^5