【发布时间】: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