C 如何计算二叉树的平均高度?

C 如何计算二叉树的平均高度?,c,data-structures,binary-tree,C,Data Structures,Binary Tree,二叉树的平均高度等于每个节点的高度之和除以总节点数 但是,如何计算每个节点的高度之和?我们是否也必须包括离开节点?并且,离开节点的高度是否为1 用例子进行彻底的解释会很好 例如,二叉树如下所示: 1 2 9 0 3 4 10 ans应为1.4285 从leave节点开始,我总共得到: 1+1+1+1+2+2+3=11 所以我得到的平均高度是=11/7,不等于1.4285。 我在这里做错了什么?您已经找到了答案,但为了进一步参考,这里有一些代码可以计

二叉树的平均高度等于每个节点的高度之和除以总节点数

但是,如何计算每个节点的高度之和?我们是否也必须包括离开节点?并且,离开节点的高度是否为1

用例子进行彻底的解释会很好

例如,二叉树如下所示:

       1
   2       9
0   3    4   10
ans应为1.4285 从leave节点开始,我总共得到: 1+1+1+1+2+2+3=11

所以我得到的平均高度是=11/7,不等于1.4285。
我在这里做错了什么?

您已经找到了答案,但为了进一步参考,这里有一些代码可以计算
c#
中的平均高度,它使用递归:

namespace AverageHeight
{
    public class tree
    {
        public tree left;
        public tree right;
    }

    class Program
    {
        static int count = 1;

        static void Main(string[] args)
        {
            var tree = new tree()
            {
                left = new tree() { left = new tree(), right = new tree() },
                right = new tree() { left = new tree(), right = new tree() }
            };

            var avg = (decimal)Height(tree, 0) / count;
        }

        static int Height(tree t, int l)
        {
            if (t.left != null) count++;
            if (t.right != null) count++;

            return l + (t.left != null ? Height(t.left, l + 1) : 0) +
                       (t.right != null ? Height(t.right, l + 1) : 0);
        }
    }
}

这是一本描述和解释二叉树和其他简单树的平均高度的好杂志。作者:Philippe Flajolet和Andrew Odlyzko。希望这有帮助!高度==到根节点的距离。我想我明白了!高度=距根节点的距离,因此距第一个(非常左的节点)的高度=2。因此,2+2+2+2+1+1=10@没错。所以它是10/7=1.4285