我是c的初学者,我遇到的问题是我很难修复。当我尝试将方法的结果存储在数组中时,我在nodes [i]= print_postorder;
char nodes[]= "";
int i;
for(i=0; i< 7; i++){
nodes [i]= print_postorder;
}
if(sizeof(nodes) > 0){
printf("There are at least one node in the tree");
}
但是print_postorder是一个void方法,所以我不明白这应该是怎样的。
还有其他与问题相关的部分,即post_order方法
void print_postorder(node * tree)
{
if (tree)
{
print_postorder(tree->left);
print_postorder(tree->right);
printf("%d\n",tree->data);
}
}
问题发生的完整程序:
#include<stdlib.h>
#include<stdio.h>
struct bin_tree {
int data;
struct bin_tree * right, * left;
};
typedef struct bin_tree 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);
}
}
void print_postorder(node * tree)
{
if (tree)
{
print_postorder(tree->left);
print_postorder(tree->right);
printf("%d\n",tree->data);
}
}
void deltree(node * tree)
{
if (tree)
{
deltree(tree->left);
deltree(tree->right);
free(tree);
}
}
node* search(node ** tree, int val)
{
if(!(*tree))
{
return NULL;
}
if(val < (*tree)->data)
{
search(&((*tree)->left), val);
}
else if(val > (*tree)->data)
{
search(&((*tree)->right), val);
}
else if(val == (*tree)->data)
{
return *tree;
}
}
int main()
{
node *root;
node *tmp;
root = NULL;
/* Inserting nodes into tree */
insert(&root, 9);
insert(&root, 4);
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);
char nodes[]= "";
int i;
for(i=0; i< 7; i++){
nodes[i]= print_postorder;
}
if(sizeof(nodes) > 0){
printf("There are at least one node in the tree");
}
/* Search node into tree */
tmp = search(&root, 4);
if (tmp)
{
printf("Searched node=%d\n", tmp->data);
}
else
{
printf("Data Not found in tree.\n");
}
/* Deleting all nodes of tree */
deltree(root);
return 0;
}
答案 0 :(得分:3)
返回类型为void
的函数表示它不返回任何内容。因此,将结果(即没有任何内容)分配给任何变量都没有意义。
即使确实返回了某个值,您实际上也没有调用该函数:
nodes[i]= print_postorder;
在函数名后面没有括号,表达式实际上是函数的地址,而不是调用函数的结果。
您想要的是print_postorder
返回树中节点的总数。要执行此操作,请将返回类型更改为int
并返回左右子树的总和加1,如果子树为空,则返回0:
int print_postorder(node * tree)
{
if (tree) {
int left = print_postorder(tree->left);
int right = print_postorder(tree->right);
printf("%d\n",tree->data);
return left + right + 1;
} else {
return 0;
}
}
然后检查节点数量,摆脱node
和循环,只需调用一次函数。
printf("Post Order Display\n");
int node_count = print_postorder(root);
if(node_count > 0){
printf("There is at least one node in the tree");
}