一些元素没有被添加到二叉搜索树中
Some of the elements are not getting added to the Binary Search Tree
我正在用 doubly-linked-list 在 C 中实现二叉搜索树。
我没有得到预期的输出。
一些元素没有被添加到树中,特别是一些正确的孩子。
我需要帮助来解决这个问题。这是我的代码,
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *root=NULL;
struct node *temp=NULL;
struct node* createnode(int data){
struct node *newNode= (struct node*)malloc(sizeof(struct node));
newNode->data= data;
newNode->left= NULL;
newNode->right= NULL;
return newNode;
}
void createBinaryTree(){
int arr[100],size,i;
printf("Enter no.of elements:");
scanf("%d",&size);
printf("\nEnter elements:");
for(i=0;i<size;++i){
scanf("%d",&arr[i]);
}
root= createnode(arr[0]);
for(i=1;i<size;i++){
temp=root;
while(arr[i]>(temp->data)){
if(temp->right==NULL){
temp->right=createnode(arr[i]);
continue;
}
temp=temp->right;
}
while(arr[i]<(temp->data)){
if(temp->left==NULL){
temp->left=createnode(arr[i]);
continue;
}
temp=temp->left;
}
}
}
您的代码:
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *root=NULL;
struct node *temp=NULL;
struct node* createnode(int data){
struct node *newNode= (struct node*)malloc(sizeof(struct node));
newNode->data= data;
newNode->left= NULL;
newNode->right= NULL;
return newNode;
}
void createBinaryTree(){
int arr[100],size,i;
printf("Enter no.of elements:");
scanf("%d",&size);
printf("\nEnter elements:");
for(i=0;i<size;++i){
scanf("%d",&arr[i]);
}
root= createnode(arr[0]);
for(i=1;i<size;i++){
temp=root;
while(arr[i]>(temp->data)){
if(temp->right==NULL){
temp->right=createnode(arr[i]);
continue;
}
temp=temp->right;
}
while(arr[i]<(temp->data)){
if(temp->left==NULL){
temp->left=createnode(arr[i]);
continue;
}
temp=temp->left;
}
}
}
有些元素被跳过的原因是你添加的方式不对。那 2 个 while 循环就是问题所在。
假设你有这棵树:
10
/ \
5 15
/ \ \
2 7 17
你想输入数字 6。
您的第一个时间将被跳过。
然后用你的第 2 个 while 去到编号为 5 的节点。
在那之后你将退出那个 while 并且什么都不会发生。
你不会到达那个 NULL。
因此,要毫无问题地添加节点,只需使用一个 while 循环,只要未达到 NULL,该循环就会起作用,并在该循环内使用一个 if 语句来检查您必须在每个节点中遵循哪条路径。
我正在用 doubly-linked-list 在 C 中实现二叉搜索树。 我没有得到预期的输出。 一些元素没有被添加到树中,特别是一些正确的孩子。
我需要帮助来解决这个问题。这是我的代码,
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *root=NULL;
struct node *temp=NULL;
struct node* createnode(int data){
struct node *newNode= (struct node*)malloc(sizeof(struct node));
newNode->data= data;
newNode->left= NULL;
newNode->right= NULL;
return newNode;
}
void createBinaryTree(){
int arr[100],size,i;
printf("Enter no.of elements:");
scanf("%d",&size);
printf("\nEnter elements:");
for(i=0;i<size;++i){
scanf("%d",&arr[i]);
}
root= createnode(arr[0]);
for(i=1;i<size;i++){
temp=root;
while(arr[i]>(temp->data)){
if(temp->right==NULL){
temp->right=createnode(arr[i]);
continue;
}
temp=temp->right;
}
while(arr[i]<(temp->data)){
if(temp->left==NULL){
temp->left=createnode(arr[i]);
continue;
}
temp=temp->left;
}
}
}
您的代码:
struct node{
int data;
struct node *left;
struct node *right;
};
struct node *root=NULL;
struct node *temp=NULL;
struct node* createnode(int data){
struct node *newNode= (struct node*)malloc(sizeof(struct node));
newNode->data= data;
newNode->left= NULL;
newNode->right= NULL;
return newNode;
}
void createBinaryTree(){
int arr[100],size,i;
printf("Enter no.of elements:");
scanf("%d",&size);
printf("\nEnter elements:");
for(i=0;i<size;++i){
scanf("%d",&arr[i]);
}
root= createnode(arr[0]);
for(i=1;i<size;i++){
temp=root;
while(arr[i]>(temp->data)){
if(temp->right==NULL){
temp->right=createnode(arr[i]);
continue;
}
temp=temp->right;
}
while(arr[i]<(temp->data)){
if(temp->left==NULL){
temp->left=createnode(arr[i]);
continue;
}
temp=temp->left;
}
}
}
有些元素被跳过的原因是你添加的方式不对。那 2 个 while 循环就是问题所在。
假设你有这棵树:
10
/ \
5 15
/ \ \
2 7 17
你想输入数字 6。
您的第一个时间将被跳过。
然后用你的第 2 个 while 去到编号为 5 的节点。
在那之后你将退出那个 while 并且什么都不会发生。
你不会到达那个 NULL。
因此,要毫无问题地添加节点,只需使用一个 while 循环,只要未达到 NULL,该循环就会起作用,并在该循环内使用一个 if 语句来检查您必须在每个节点中遵循哪条路径。