简体   繁体   English

如何计算二叉树中的节点总数

[英]How to count the total number of nodes in binary tree

I need to count the total number of nodes in binary tree.我需要计算二叉树中节点的总数。 The problem now arise when I execute this code, it's giving garbage value for total number of nodes.现在当我执行此代码时出现了问题,它给出了节点总数的垃圾值。 The output of my program is like 993814 .我的程序的输出就像993814 which should be 7 .这应该是7

How to fix this problem?如何解决这个问题?

#include<stdlib.h>
#include<stdio.h>

struct binarytree
{
    int data;
    struct binarytree * right, * left;
};

typedef struct binarytree node;

void insert(node ** tree, int val)
{
    node *temp = NULL;
    if(!(*tree))
    {
        temp = (node *)malloc(sizeof(node));
        temp->left = temp->right = NULL;
        temp->data = val;
        *tree = temp;
        return;
    }

    if(val < (*tree)->data)
    {
        insert(&(*tree)->left, val);
    }
    else if(val > (*tree)->data)
    {
        insert(&(*tree)->right, val);
    }

}

void print_preorder(node * tree)
{
    if (tree)
    {
        printf("%d\n",tree->data);
        print_preorder(tree->left);
        print_preorder(tree->right);
    }

}

void print_inorder(node * tree)
{
    if (tree)
    {
        print_inorder(tree->left);
        printf("%d\n",tree->data);
        print_inorder(tree->right);
    }
}

int count(node *tree)
{
    int c=0;

    if (tree ==NULL)
        return 0;

    else
    {
        c += count(tree->left);
        c += count(tree->right);
        return c;
    }
}

void print_postorder(node * tree)
{
    if (tree)
    {
        print_postorder(tree->left);
        print_postorder(tree->right);
        printf("%d\n",tree->data);
    }
}

int main()
{
    node *root;
    node *tmp;
    int c;

    root = NULL;
    /* Inserting nodes into tree */
    insert(&root, 9);
    insert(&root, 10);
    insert(&root, 15);
    insert(&root, 6);
    insert(&root, 12);
    insert(&root, 17);
    insert(&root, 2);

    /* Printing nodes of tree */
    printf("Pre Order Display\n");
    print_preorder(root);

    printf("In Order Display\n");
    print_inorder(root);

    printf("Post Order Display\n");
    print_postorder(root);

    printf("Number of node %d \n",c);

}

I would rather do it by returning the sum in each recursive call without using the local variable.我宁愿通过在不使用局部变量的情况下在每个递归调用中返回总和来实现。

int count(struct node *root){
    if(root == NULL){
        return 0;
    }
    else{
        return 1 + count(root->left) + count(root->right);
    }
}

You declare c but not initialize nowhere and also not used in anywhere.您声明c但未在任何地方初始化,也未在任何地方使用。 Then you print the value of c , which gives you garbage value.然后你打印c的值,它给你垃圾值。

You can fix your count(node *tree) function as您可以将count(node *tree)函数修复为

int count(node *tree)
{
    int c =  1;             //Node itself should be counted
    if (tree ==NULL)
        return 0;
    else
    {
        c += count(tree->left);
        c += count(tree->right);
        return c;
    }
}

add in main加入main

int main()
{
    .............
    .............


    c = count(root);        //number of node assign to c
    printf("Number of node %d \n",c);
}

count function would be int count(struct node *root) { int a=1;计数函数将是 int count(struct node *root) { int a=1;

if (root==NULL){
    return 0;
}

else
{
    a += count(root->left);
    a += count(root->right);
    return a;
}

} }

In main function在主函数中

calling of count function would be like that调用 count 函数就是这样

printf("total no of nodes of binary tree is %d\\n",count(p));//p is root node printf("二叉树的节点总数为%d\\n",count(p));//p为根节点

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM