好的,所以我试图找到的问题是为什么当我调用print_inOrder()时,我没有得到任何打印回来的内容。我想要做的任务是按降序编写树算法(意思是左边的值越高,右边的值就越低)。我之前已经创建了一个创建了一个树的函数,所以我刚修改它并且它可以正常工作;但是这个赋值的签名与我的旧赋值不同,当我尝试更改指针时,我将其编译,但没有打印出来。因此,如果有人可以仔细检查我的更改,并解释我哪里出错了以及我需要如何修复它,这将是我的一天! ^。^
工作原始功能:
Tnode add_tnode(Tnode **current_tnode, char *value)
{
if(!(*current_tnode))
{
*current_tnode = (Tnode*) malloc(sizeof(Tnode));
(*current_tnode)->strValue = value;
//initialize the children to null
(*current_tnode)->left = NULL;
(*current_tnode)->right = NULL;
}
//Greater values go to left
else if(strcmp(value, (*current_tnode)->strValue) >= 0)
{
return add_tnode(&(*current_tnode)->left, value);
}
//Lesser values go to right
else if(strcmp(value, (*current_tnode)->strValue) < 0)
{
return add_tnode(&(*current_tnode)->right, value);
}
}
如何在main中调用它:
Tnode *root;
root = NULL;
//Add some nodes with string values
add_tnode(&root, "pie");
add_tnode(&root, "hi");
add_tnode(&root, "hi");
add_tnode(&root, "l");
add_tnode(&root, "leg");
//Print nodes in descending order
print_inOrder(root);
需要签名:
Tnode *add_tnode(Tnode *current_tnode, char* value)
我尝试修复:
Tnode *add_tnode(Tnode *current_tnode, char* value)
{
if(!(current_tnode))
{
current_tnode = (Tnode*) malloc(sizeof(Tnode));
(current_tnode)->strValue = value;
/* initialize the children to null */
(current_tnode)->left = NULL;
(current_tnode)->right = NULL;
}
// Greater values go to left
else if(strcmp(value, (current_tnode)->strValue) >= 0)
{
return add_tnode((current_tnode)->left, value);
}
// Lesser values go to right
else if(strcmp(value, (current_tnode)->strValue) < 0)
{
return add_tnode((current_tnode)->right, value);
}
}
如何在Main中调用它:
Tnode *root;
root = NULL;
//Add some nodes with string values
add_tnode(root, "pie");
add_tnode(root, "hi");
add_tnode(root, "hi");
add_tnode(root, "l");
add_tnode(root, "leg");
//Print nodes in descending order
print_inOrder(root);
这是print_inOrder()以防万一有人想看看它
void print_inOrder(Tnode *current_tnode)
{
if (current_tnode)
{
print_inOrder(current_tnode->left);
printf("%s\n",current_tnode->strValue);
print_inOrder(current_tnode->right);
}
}
当我通过gdb调试器运行并调用print函数时,它只会通过if语句并结束,我猜这意味着树根本没有创建或传递值不正确。如果有人能告诉我这个错误是什么,我会非常感激!
答案 0 :(得分:1)
你的问题是你的第一个函数需要Tnode **
,这是一个指向指针的指针,并修改它所指向的TNode *
。你的第二个函数只接受指针,并修改传入的参数;调用者无法看到这些更改,因此没有任何内容添加到树中。
在执行任何操作之前,您应该分配并分配root
节点,然后更改该函数,以便它修改TNode
而不是指针。
答案 1 :(得分:0)
如果之前的作业有效,您只需更改打印功能,在探索左侧节点之前探索正确的节点。
void print_inOrder(Tnode *current_tnode)
{
if (current_tnode)
{
print_inOrder(current_tnode->right);
printf("%s\n",current_tnode->strValue);
print_inOrder(current_tnode->left);
}
}