You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C++递归验证二叉树是否为二叉搜索树(BST)

二叉搜索树(BST)递归验证的辅助函数设计

我尝试用C++写递归函数判断二叉树是否为BST,一开始只比较每个节点和它的直接左右子节点,但这显然不够——深层节点可能因为祖先节点的限制违反BST规则。比如下面这棵树:

10
      \
      15
     /
      6

节点6比15小,但它在10的右子树里,所以这棵树不是BST。我知道递归时需要跟踪每个节点的有效取值范围,但不确定怎么设计辅助函数。当前的节点结构是:

template <typename T>
struct Node {
    T value;
    Node<T>* left;
    Node<T>* right;
};

辅助函数的核心参数

辅助函数需要包含三个关键参数:

  • 当前正在检查的Node<T>*节点
  • 该节点允许的最小值边界(可以用const T*或者C++17的std::optional<T>,因为根节点没有初始下界)
  • 该节点允许的最大值边界(同理,根节点没有初始上界)

递归过程中的范围更新思路

  • 递归检查当前节点的左子树时:左子树所有节点的值必须小于当前节点的值,因此把当前节点的值作为左子树的最大值边界,最小值边界保持和当前节点的最小值边界一致
  • 递归检查当前节点的右子树时:右子树所有节点的值必须大于当前节点的值,因此把当前节点的值作为右子树的最小值边界,最大值边界保持和当前节点的最大值边界一致
  • 每个节点自身需要满足:如果存在最小值边界,则节点值必须大于该边界;如果存在最大值边界,则节点值必须小于该边界

内容的提问来源于stack exchange,提问作者dot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 16:24:50