gpt4 book ai didi

c - C中二叉搜索树中的叶子数

转载 作者:行者123 更新时间:2023-12-02 08:17:05 26 4
gpt4 key购买 nike

我是初学者,正在研究 C 二叉搜索树。我正在尝试执行一种方法来返回树中叶子的数量。叶子是指没有子节点(左/对)这是我的树结构:

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

typedef struct Node TNode;
typedef struct Node *binary_tree;

它是这样创建的:

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;
}

我向其中添加元素,例如:

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);
}
}
}

我实际计算叶子数量的方法:

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

当然这首先不起作用没有实际的循环,但我试过它不返回任何错误但 0(例如在将元素 2222 和 3 添加到树后此函数返回 0)。我不知道如何执行此函数.

谢谢!

最佳答案

因为你必须初始化nb

int nb = 0;

由于 nb 未初始化,它包含一个“随机”或“垃圾”值,所以您看到的行为是因为该值可以是很大。但无法预测该值是多少。

注意:不要对空格“吝啬”,不要使用太多空格,但让您的代码稍微喘口气。

比较

if(tree->right==NULL && tree->left ==NULL){
nb=nb+1;
}

if ((tree->right == NULL) && (tree->left == NULL)) {
nb = nb + 1;
}

关于c - C中二叉搜索树中的叶子数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132740/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com