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

时间:2015-06-08 07:29:22

标签: c data-structures binary-tree

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

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

通过示例进行彻底解释会很棒!

例如,使用下面显示的二叉树:

       1
   2       9
0   3    4   10

ans应为1.4285 从离开节点开始,我总得到: 1 + 1 + 1 + 1 + 2 + 2 + 3 = 11

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

1 个答案:

答案 0 :(得分:1)

你已经弄明白了,但是对于进一步的参考,这里有一些代码来计算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);
        }
    }
}