这是 inserting/creating 二叉树的代码?但是 display() 函数没有显示任何内容?我错过了什么?
This is the code for inserting/creating a binary tree? but the display() function is not displaying anything? what am I missing?
有一个递归插入树的插入函数和显示输出的显示函数。
display() 函数没有显示任何内容?有什么我遗漏的错误吗?
请帮忙
#include <stdio.h>
#include<stdlib.h>
typedef struct node
{ int val;
struct node *left;
struct node *right;
} node;
node *root=NULL;
void insert(node *root1,int value)
{
if(root==NULL)
{
node *temp=(node*)malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
root=temp;
root1=root;
return;
}
if(root1==NULL && root!=NULL)
{
node *temp=(node*)malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
root1=temp;
return;
}
if(root1->val >value)
{
insert(root1->left, value);
}
else
{
insert(root1->right, value);
}
return;
}
void display(node *root1)
{
if(root1==NULL)
{
return;
}
while(root1 !=NULL)
{
printf("%d\n", root1->val);
display(root1->left);
display(root1->right);
return;
}
}
int main()
{
insert(root,4);
insert(root,12);
insert(root,2);
insert(root,55);
display(root);
return 0;
}
实际上,我是编程新手并尝试实现树。也欢迎新的建议!谢谢
//编辑
void sayHi(int* nums){
printf("hello");
printf("my address is %d \n",nums);
printf("val of nums[2] is%d\n", nums[2]);
nums[2]=30;
}
void someFunct(int* nums, int numsSize){
nums[2]=50;
sayHi(nums);
printf("address is %d\n",nums);
printf("val of nums[2] is%d\n", nums[2]);
}
输入即 nums =[0,0,0,0,0]
以上代码的输出是
hellomy address is 16
val of arr[2] is50
address is 16
val of arr[2] is30
我们在这里传递 sayHi(nums)?它仍然有效吗? nums 的地址在 someFunct 和 sayHi 中是否相同?
像 someFunct(&ptr) 这样传递 arg 只发生在结构上吗?
方法一
在这个方法中root
指针被声明为main
中的局部变量,指针的地址被传递给insert
函数。这允许 insert
函数更改 main
.
中 root
的值
此方法的缺点是它涉及 C 语言中一些最讨厌的语法,到处都是 *
s 和 &
s,以及过多的强制性括号。
void insert(node **root, int value)
{
if (*root == NULL)
{
node *temp=malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
*root = temp;
}
else
{
if((*root)->val > value)
insert(&(*root)->left, value);
else
insert(&(*root)->right, value);
}
}
int main(void)
{
node *root=NULL;
insert(&root,4);
insert(&root,12);
insert(&root,2);
insert(&root,55);
display(root);
}
方法二
与方法 1 类似,此方法也将 root
指针的地址传递给 insert
函数,但为了避免指针指向指针强加的一些令人讨厌的语法,一个本地指针 item
用于访问结构内容。这消除了方法 1 中所需的大部分 *
和括号。
这种方法的缺点是仍然有 &
散布在整个代码中,很容易忘记更新调用者指针的行 *root = temp;
。
void insert(node **root, int value)
{
node *item = *root;
if (item == NULL)
{
node *temp=malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
*root = temp;
}
else
{
if(item->val > value)
insert(&item->left, value);
else
insert(&item->right, value);
}
}
int main(void)
{
node *root=NULL;
insert(&root,4);
insert(&root,12);
insert(&root,2);
insert(&root,55);
display(root);
}
方法三
在这个方法中,我们 return 来自 insert
函数的新 root
指针。因此,第一个函数参数可以是一个简单的指针。这消除了方法 1 中的讨厌语法。*
更少,绝对没有 &
,也没有多余的括号。
此方法的缺点是需要将函数的 return 值分配给适当的指针。这导致 insert
函数中的一些赋值(在递归调用时),以及 main
.
中的赋值
node *insert(node *root, int value)
{
if (root == NULL)
{
root=malloc(sizeof(node));
root->val=value;
root->left=NULL;
root->right=NULL;
}
else
{
if(root->val > value)
root->left = insert(root->left, value);
else
root->right = insert(root->right, value);
}
return root;
}
int main(void)
{
node *root=NULL;
root = insert(root,4);
root = insert(root,12);
root = insert(root,2);
root = insert(root,55);
display(root);
}
样板文件
这是与上述任何方法中的 insert
和 main
函数结合使用时的代码,可提供一套完整的可编译代码和 运行.
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{ int val;
struct node *left;
struct node *right;
} node;
void display(node *root)
{
if(root != NULL)
{
printf("%d\n", root->val);
display(root->left);
display(root->right);
}
}
有一个递归插入树的插入函数和显示输出的显示函数。 display() 函数没有显示任何内容?有什么我遗漏的错误吗? 请帮忙
#include <stdio.h>
#include<stdlib.h>
typedef struct node
{ int val;
struct node *left;
struct node *right;
} node;
node *root=NULL;
void insert(node *root1,int value)
{
if(root==NULL)
{
node *temp=(node*)malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
root=temp;
root1=root;
return;
}
if(root1==NULL && root!=NULL)
{
node *temp=(node*)malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
root1=temp;
return;
}
if(root1->val >value)
{
insert(root1->left, value);
}
else
{
insert(root1->right, value);
}
return;
}
void display(node *root1)
{
if(root1==NULL)
{
return;
}
while(root1 !=NULL)
{
printf("%d\n", root1->val);
display(root1->left);
display(root1->right);
return;
}
}
int main()
{
insert(root,4);
insert(root,12);
insert(root,2);
insert(root,55);
display(root);
return 0;
}
实际上,我是编程新手并尝试实现树。也欢迎新的建议!谢谢
//编辑
void sayHi(int* nums){
printf("hello");
printf("my address is %d \n",nums);
printf("val of nums[2] is%d\n", nums[2]);
nums[2]=30;
}
void someFunct(int* nums, int numsSize){
nums[2]=50;
sayHi(nums);
printf("address is %d\n",nums);
printf("val of nums[2] is%d\n", nums[2]);
}
输入即 nums =[0,0,0,0,0]
以上代码的输出是
hellomy address is 16
val of arr[2] is50
address is 16
val of arr[2] is30
我们在这里传递 sayHi(nums)?它仍然有效吗? nums 的地址在 someFunct 和 sayHi 中是否相同?
像 someFunct(&ptr) 这样传递 arg 只发生在结构上吗?
方法一
在这个方法中root
指针被声明为main
中的局部变量,指针的地址被传递给insert
函数。这允许 insert
函数更改 main
.
root
的值
此方法的缺点是它涉及 C 语言中一些最讨厌的语法,到处都是 *
s 和 &
s,以及过多的强制性括号。
void insert(node **root, int value)
{
if (*root == NULL)
{
node *temp=malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
*root = temp;
}
else
{
if((*root)->val > value)
insert(&(*root)->left, value);
else
insert(&(*root)->right, value);
}
}
int main(void)
{
node *root=NULL;
insert(&root,4);
insert(&root,12);
insert(&root,2);
insert(&root,55);
display(root);
}
方法二
与方法 1 类似,此方法也将 root
指针的地址传递给 insert
函数,但为了避免指针指向指针强加的一些令人讨厌的语法,一个本地指针 item
用于访问结构内容。这消除了方法 1 中所需的大部分 *
和括号。
这种方法的缺点是仍然有 &
散布在整个代码中,很容易忘记更新调用者指针的行 *root = temp;
。
void insert(node **root, int value)
{
node *item = *root;
if (item == NULL)
{
node *temp=malloc(sizeof(node));
temp->val=value;
temp->left=NULL;
temp->right=NULL;
*root = temp;
}
else
{
if(item->val > value)
insert(&item->left, value);
else
insert(&item->right, value);
}
}
int main(void)
{
node *root=NULL;
insert(&root,4);
insert(&root,12);
insert(&root,2);
insert(&root,55);
display(root);
}
方法三
在这个方法中,我们 return 来自 insert
函数的新 root
指针。因此,第一个函数参数可以是一个简单的指针。这消除了方法 1 中的讨厌语法。*
更少,绝对没有 &
,也没有多余的括号。
此方法的缺点是需要将函数的 return 值分配给适当的指针。这导致 insert
函数中的一些赋值(在递归调用时),以及 main
.
node *insert(node *root, int value)
{
if (root == NULL)
{
root=malloc(sizeof(node));
root->val=value;
root->left=NULL;
root->right=NULL;
}
else
{
if(root->val > value)
root->left = insert(root->left, value);
else
root->right = insert(root->right, value);
}
return root;
}
int main(void)
{
node *root=NULL;
root = insert(root,4);
root = insert(root,12);
root = insert(root,2);
root = insert(root,55);
display(root);
}
样板文件
这是与上述任何方法中的 insert
和 main
函数结合使用时的代码,可提供一套完整的可编译代码和 运行.
#include <stdio.h>
#include <stdlib.h>
typedef struct node
{ int val;
struct node *left;
struct node *right;
} node;
void display(node *root)
{
if(root != NULL)
{
printf("%d\n", root->val);
display(root->left);
display(root->right);
}
}