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

如何用C语言计算二叉搜索树(BST)中指定节点的深度

代码问题分析

  • 致命逻辑错误:代码中root->left->data = depth(root->left, N)和root->right->data = depth(root->right, N)语句会直接修改二叉树节点的存储数据,完全破坏原树结构,这是得到错误结果的核心原因,不需要修改树的任何值,只需要接收递归的返回值做判断即可。
  • 递归返回值处理错误:没有判断子树递归查找是否成功找到目标节点,直接对count做自增,会导致没找到节点时返回0而不是预期的-1。
  • 可选优化:如果目标是通过指针匹配节点,直接比较root == N比比较data更准确,可避免BST存在重复值时的匹配错误。

修正后代码

int depth(Node *root, Node *N){
    // 空树直接返回-1,代表未找到
    if (root == NULL){
        return -1;
    }
    // 当前节点就是目标节点,深度为0
    if (root == N){ // 如果你确定要按data匹配,这里可以改回root->data == N->data
        return 0;
    }
    // 往左子树查找
    if (N->data < root->data){
        int left_depth = depth(root->left, N);
        // 左子树找到的话,当前深度是左子树深度+1,没找到就返回-1
        return left_depth == -1 ? -1 : left_depth + 1;
    }
    // 往右子树查找
    else {
        int right_depth = depth(root->right, N);
        return right_depth == -1 ? -1 : right_depth + 1;
    }
}

逻辑说明

  • 每一层递归只负责判断当前节点是否匹配,不匹配就根据BST的大小关系向对应子树递归
  • 子树返回-1代表子树中没有目标节点,当前层直接返回-1
  • 子树返回非负值代表子树中找到目标节点,当前层深度为子树返回值+1(多走了一层)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 09:15:02