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).我不知道如何做这个函数.
谢谢!
因为你必须初始化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)
| 归档时间: |
|
| 查看次数: |
363 次 |
| 最近记录: |