二叉树,我哪里错了?
Binary tree , Where am I wrong?
好吧,这似乎在某处是错误的,可能是内存分配或指针(最有可能),我做错了什么?
我在创建新节点时遇到错误,除了第一个 node.The 错误不清楚。
谢谢
#include <stdio.h>
#include <stdlib.h>
struct binary_tree{
int data;
struct binary_tree *leftnode;
struct binary_tree *rightnode;
};
void create_node(struct binary_tree *node , int input)
{
struct binary_tree *new_node;
new_node = (struct binary_tree *)malloc(sizeof(struct binary_tree));
new_node->data = input;
new_node->leftnode = NULL;
new_node->rightnode = NULL;
node = new_node;
}
void LNR_traversal(struct binary_tree *node)
{
while(!(node->leftnode== NULL && node ->rightnode==NULL))
{
if(node->leftnode!=NULL)
LNR_traversal(node->leftnode);
printf("%d",node->data);
if(node->rightnode!=NULL)
LNR_traversal(node->rightnode);
}
}
int main()
{
int i;
int input;
struct binary_tree *start;
struct binary_tree *node;
printf("Data:");
scanf("%d",&input);
create_node(start,input);
//node = start;
printf("\nDATA:");
scanf("%d",&input);
while(input!=-1)
{
node = start;
if(node->leftnode == NULL){
create_node(node->leftnode,input);
printf("1");
}
else if(node->rightnode == NULL)
create_node(node->rightnode,input);
else if(node->leftnode != NULL && node->rightnode!=NULL){
node = node->leftnode;
node = node->rightnode;
}
printf("\nDATA:");
scanf("%d",&input);
}
node=start;
LNR_traversal(start);
return 0;
}
在 C 中调用函数时,参数按值传递。这意味着参数被复制作为参数,所以修改被调用方的参数不会影响调用方的变量。
在被调用者中使用指针修改调用者的局部变量。
在这种情况下,我认为 return 从 create_node()
分配节点并让调用者分配 return 值比使用指针修改变量更好。
问题出在您的 create_node
函数上。
代码:
struct binary_tree *new_node;
new_node = (struct binary_tree *)malloc(sizeof(struct binary_tree));
if ( node ==NULL ) {
new_node->data = input;
new_node->leftnode = NULL;
new_node->rightnode = NULL;
node = new_node;
}
else if (input < node->data) {
create_node(node->left,input);
}
else {
create_node(node->right,input);
}
}
实际上这是针对二叉排序树的
通过这种方式,当您想向树中添加一些内容时,只需使用:
create_node(root_node,value);
好吧,这似乎在某处是错误的,可能是内存分配或指针(最有可能),我做错了什么?
我在创建新节点时遇到错误,除了第一个 node.The 错误不清楚。
谢谢
#include <stdio.h>
#include <stdlib.h>
struct binary_tree{
int data;
struct binary_tree *leftnode;
struct binary_tree *rightnode;
};
void create_node(struct binary_tree *node , int input)
{
struct binary_tree *new_node;
new_node = (struct binary_tree *)malloc(sizeof(struct binary_tree));
new_node->data = input;
new_node->leftnode = NULL;
new_node->rightnode = NULL;
node = new_node;
}
void LNR_traversal(struct binary_tree *node)
{
while(!(node->leftnode== NULL && node ->rightnode==NULL))
{
if(node->leftnode!=NULL)
LNR_traversal(node->leftnode);
printf("%d",node->data);
if(node->rightnode!=NULL)
LNR_traversal(node->rightnode);
}
}
int main()
{
int i;
int input;
struct binary_tree *start;
struct binary_tree *node;
printf("Data:");
scanf("%d",&input);
create_node(start,input);
//node = start;
printf("\nDATA:");
scanf("%d",&input);
while(input!=-1)
{
node = start;
if(node->leftnode == NULL){
create_node(node->leftnode,input);
printf("1");
}
else if(node->rightnode == NULL)
create_node(node->rightnode,input);
else if(node->leftnode != NULL && node->rightnode!=NULL){
node = node->leftnode;
node = node->rightnode;
}
printf("\nDATA:");
scanf("%d",&input);
}
node=start;
LNR_traversal(start);
return 0;
}
在 C 中调用函数时,参数按值传递。这意味着参数被复制作为参数,所以修改被调用方的参数不会影响调用方的变量。
在被调用者中使用指针修改调用者的局部变量。
在这种情况下,我认为 return 从 create_node()
分配节点并让调用者分配 return 值比使用指针修改变量更好。
问题出在您的 create_node
函数上。
代码:
struct binary_tree *new_node;
new_node = (struct binary_tree *)malloc(sizeof(struct binary_tree));
if ( node ==NULL ) {
new_node->data = input;
new_node->leftnode = NULL;
new_node->rightnode = NULL;
node = new_node;
}
else if (input < node->data) {
create_node(node->left,input);
}
else {
create_node(node->right,input);
}
}
实际上这是针对二叉排序树的
通过这种方式,当您想向树中添加一些内容时,只需使用:
create_node(root_node,value);