C中二叉搜索树中的叶数

Chr*_* M. 2 c tree binary-tree binary-search-tree

我是一个初学者,正在研究C二叉搜索树.我正在尝试一种方法,它将返回树中叶子的数量.叶子我的意思是一个没有孩子的节点(父节点)(左/右)Heres我的树结构:

struct Node {
    int value;
    struct Node *left;
    struct Node *right;
};

typedef struct Node TNode;
typedef struct Node *binary_tree;
Run Code Online (Sandbox Code Playgroud)

它是这样创建的:

binary_tree NewBinaryTree(int value_root) {
    binary_tree newRoot = malloc(sizeof(TNode));
    if (newRoot) {
        newRoot->value = value_root;
        newRoot->left = NULL;
        newRoot->right = NULL;
    }
    return newRoot;
}
Run Code Online (Sandbox Code Playgroud)

我添加元素如:

void Insert(binary_tree *tree, int val) {
    if (*tree == NULL) {
        *tree = (binary_tree)malloc(sizeof(TNode));
        (*tree)->value = val;
        (*tree)->left = NULL;
        (*tree)->right = NULL;
    } else {
        if (val < (*tree)->value) {
            Insert(&(*tree)->left, val);
        } else {
            Insert(&(*tree)->right, val);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我实际计算叶数的方法:

 int nbleaves(binary_tree tree)
 {
     int nb;
     if(tree->right==NULL && tree->left ==NULL){
        nb=nb+1;
     }
     printf("%d",nb);
 }
Run Code Online (Sandbox Code Playgroud)

当然这不起作用首先没有实际的循环,但是我试过它它不会返回任何错误但是0(在向树添加元素2222和3之后这个函数返回0).我不知道如何做这个函数.

谢谢!

Iha*_*imi 5

因为你必须初始化nb.

int nb = 0;
Run Code Online (Sandbox Code Playgroud)

由于nb未初始化它包含" 随机 "或" 垃圾 "值,因此您看到的行为是因为该值可能非常大.但是没有办法预测这个价值是什么.

注意:不要用白色空间" 吝啬 ",不要使用太多但是让你的代码呼吸一点.

相比

if(tree->right==NULL && tree->left ==NULL){
    nb=nb+1;
}
Run Code Online (Sandbox Code Playgroud)

if ((tree->right == NULL) && (tree->left == NULL)) {
    nb = nb + 1;
}
Run Code Online (Sandbox Code Playgroud)