查找平衡 BST 中和为零的三个数

17 Mar 2025 | 4 分钟阅读

问题陈述

给定一棵平衡(高度平衡)的二叉搜索树,任务是找出是否存在和为 0 的三元组(3 个元素),如果存在则返回“存在”,否则返回“不存在”。

输入

输出

{-13,  6, 7}

最直接的方法是检查二叉搜索树(BST)中的每个三元组,并验证它们的和是否等于零。此方法的时间复杂度为 O(n^3)。

一种改进的策略是生成一个辅助数组来存储二叉搜索树(BST)的中序遍历。由于 BST 的中序遍历始终产生排序的数据,因此该数组保证是有序的。

更好的方法

提供的解决方案在 O(n^2) 时间复杂度内运行,并利用 O(Logn) 的额外空间。

  1. 将给定的二叉搜索树(BST)转换为双向链表(DLL)。
  2. 遍历 DLL 的每个节点。如果节点的键为负数,则在 DLL 中搜索一对其和等于当前节点键的相反数的元素。

Java 实现

输出

Find if there is a triplet in a balanced bst that adds to zero

时间复杂度:O(n^2)

空间复杂度: O(log(n))