【问题标题】:Function that return average depth of a binary search tree返回二叉搜索树平均深度的函数
【发布时间】:2015-08-25 10:01:55
【问题描述】:

我有以下二叉树结构,我想编写一个函数来计算并返回树中对象的平均深度。 这是我想要做的:

  • 计算树的总高度
  • 划分总高度/总节点

但是,我一无所获,并且很想就如何实施该算法提出任何有用的建议。

typedef struct tree_s tree_t;
struct tree_s {
    int num;
    tree_t *left;
    tree_t *right;
}


int total_depth(tree_t *tree, int accum) {
    if (tree == NULL) {
        return accum; /* done */
    }
    accum = accum + total_depth(tree->left, accum+1);
    accum = accum + total_depth(tree->right, accum+1);
    return accum;
}

我的递归函数 total_depth 似乎有问题,因为我得到了一个大得离谱的数字。

【问题讨论】:

  • 你不是在函数的某处遗漏了return 吗? accum_depth 是什么?
  • 一棵树的平均深度的定义是什么?是 Sum{depth(v) |对于所有节点 v}/#nodes?
  • 你不应该添加左右子树的深度,而是选择并返回两者中较大的一个(加1之后)。
  • 感谢@JoachimPileborg 注意到我的错误,我已在上述问题中更正了它们:)
  • 如果我错了,请纠正我。据我了解,树中对象的平均深度等于树中每个节点/总对象的深度之和?

标签: c algorithm tree binary-tree binary-search-tree


【解决方案1】:

你应该这样做:

int total_depth(tree_t *tree, int accum)
{
    if (tree == NULL) {
        return 0;
    }
    return accum +
        total_depth(tree->left, accum + 1) +
        total_depth(tree->right, accum + 1);
}

total_depth(root, 0);

【讨论】:

  • 感谢您的回答。你有一个错字,因为 int 变量 depth 没有在函数中声明。我假设它应该是变量 accum 吗?但是,total_depth 函数不会返回正确的值。 :(
  • 是的,我的意思是accum。你需要得到所有节点的累积深度,不是吗?
  • 是的。您的函数几乎是正确的,但是它似乎返回了额外的累加总和而不是正确的总和。我试图玩弄它并意识到实际出了什么问题。由于递归函数一直循环直到它到达离开节点(该节点没有子节点),它返回累加。相反,如果 tree == NULL,它应该返回 0。谢谢你的帮助!现在一切都像魅力一样!
猜你喜欢
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-08
  • 2010-12-24
相关资源
最近更新 更多