C-方法找到从根到叶的平均距离

C- method find average distance from root to leaves

如何找到二叉树中根到所有叶子的平均距离 距离表示节点之间的边数。 该方法获取根。 我想在节点中添加新字段。

我在 C 中的代码:

 // A Binary Tree Node 
struct Node 
{ 
    int data; 
    Node *left, *right; 
}; 

int findDistance(Node *root) 
{ 
    // Base case 
    if (root == NULL) 
      return -1; 

    // Initialize distance 
    int dist = -1; 

    if ((root->data != NULL) || 
        (dist = findDistance(root->left)) >= 0 + (dist = findDistance(root->right)) >= 0) /2

        return dist + 1; 

    return dist; 
} 

我希望下面的方法可以工作,但我还没有测试过。

typedef struct
{
    int Number; // Number of nodes in tree.
    int TotalDepths; // Total of depth of each node.
} NAndTotal;

static NAndTotal FindNumberAndTotalDepth(Node *Root)
{
    if (Root == NULL)
        return (NAndTotal) { 0, 0 }; // No nodes in empty tree.

    // Start an NAndTotal with information about the root node.
    NAndTotal A = { 1, 0 }; // Root is 1 node at depth 0.
    // Add the left subtree.
    NAndTotal B = FindNumberAndTotalDepth(Root->left);
    A.Number += B.Number; // Including left subtree adds its nodes.
    A.TotalDepth += B.TotalDepth + B.Number; Each of its nodes become one deeper when placed under this node.

    // Add the right subtree.
    B = FindNumberAndTotalDepth(Root->right);
    A.Number += B.Number; // Including right subtree adds its nodes.
    A.TotalDepth += B.TotalDepth + B.Number; Each of its nodes become one deeper when placed under this node.

    return A;
}

double FindAverage(Node *Root)
{
    NAndTotal NT = FindNumberAndTotalDepth(Root);
    return (double) NT.TotalDepths / NT.Number;
}