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

二叉树任意深度节点数等于树高检查函数异常排查请求

问题排查与修正

首先,你的count_nodes_at_depth函数逻辑是正确的,能够准确统计指定深度的节点数量。问题出在check_depth_nodes_equal_height函数的核心逻辑上,以及对需求的实现偏差:

核心问题分析

当前check_depth_nodes_equal_height的逻辑是要求二叉树的每一个深度的节点数都等于树的高度,这在绝大多数二叉树中都不可能满足:

  • 比如你示例中的满二叉树,树高为3,深度0的节点数是1(仅根节点),显然不等于3,函数直接返回0;
  • 即使修改树结构,深度0的节点数永远是1,只有当树高为1(仅根节点)时才满足,其他情况都会返回“不等”。

这就是为什么无论你怎么修改树结构,程序始终返回否定结果的原因。

修正方案

根据你的需求描述(“检查二叉树任意深度的节点数是否等于树高”),推测你真实想要实现的是检查是否存在至少一个深度,其节点数量等于树的高度。以下是修正后的check_depth_nodes_equal_height函数:

/* Main function that verifies if there exists any depth whose node count equals the tree height */
int check_depth_nodes_equal_height(TREE t) {
    int altezza = tree_height(t);

    for (int depth = 0; depth < altezza; depth++) {
        int nodes_at_depth = count_nodes_at_depth(t, depth, 0);

        // 找到任意一个满足条件的深度就返回1(真)
        if (nodes_at_depth == altezza) {
            return 1;
        }
    }

    // 所有深度都不满足条件,返回0(假)
    return 0;
}

测试用例验证

如果你构造一棵符合条件的树,比如树高为2,且深度1的节点数为2(等于树高):

int main() {
    /* Create a tree with height 2, depth 1 has 2 nodes */
    TREE root = create_node(1);
    root->left = create_node(2);
    root->right = create_node(3);

    int altezza = tree_height(root);
    printf("The tree height is: %d\n\n", altezza);

    if (check_depth_nodes_equal_height(root)) {
        printf("There exists a depth whose node count equals the tree height\n");
    } else {
        printf("No depth has node count equal to the tree height\n");
    }
}

此时程序会输出肯定结果,符合预期。

额外说明

如果你的需求确实是要求所有深度的节点数都等于树高,那么这种树仅存在一种极端情况:树高为1(只有根节点),此时深度0的节点数1等于树高1。其他任何树都无法满足该条件,这种逻辑没有实际意义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 03:24:57