[英]Binary Search Tree insertion by recursive function can't access node by root
我正在嘗試使用 C 中的結構編寫二叉搜索樹的代碼。我想制作兩個單獨的結構,稱為“樹”和“節點”。 然后我創建了一個 root 的指針對象。 我計划將所有節點依次鏈接到根對象。 但是當我嘗試從 root 的對象編譯器轉到 node 時顯示錯誤。 我的代碼是這樣的:
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
struct node{
int data;
struct node* left;
struct node* right;
}*new_node ;
struct tree{
int count;
struct node* p;
}*root ;
void create_root(){
root = (tree *) malloc(sizeof(tree));
root->count=0;
root->p=NULL;
}
void insert_node(tree *root){
if(root->p == NULL and root->count==0){
root->p = new_node;
root->count++;
return;
}
else if(root->p->left==NULL and root->p->right==NULL){
if(root->p->data > new_node->data){
root->p->left = new_node;
}
else if(root->p->data <= new_node->data){
root->p->right = new_node;
}
root->count++;
return;
}
else{
if(root->p->data <= new_node->data){
return insert_node(root->p->right);
}
if(root->p->data > new_node->data){
return insert_node(root->p->left);
}
}
}
int main()
{
create_root();
new_node = (node *) malloc(sizeof(node));
new_node->data=321;
new_node->left=NULL;
new_node->right=NULL;
insert_node(*root);
return 0;
}
編譯器顯示如下錯誤:
/home/ahashans/Documents/bst_new.cpp||In function ‘void
insert_node(tree*)’:|
/home/ahashans/Documents/bst_new.cpp|37|error: cannot convert ‘node*’ to
‘tree*’ for argument ‘1’ to ‘void insert_node(tree*)’|
/home/ahashans/Documents/bst_new.cpp|37|error: return-statement with a
value, in function returning 'void' [-fpermissive]|
/home/ahashans/Documents/bst_new.cpp|40|error: cannot convert ‘node*’ to
‘tree*’ for argument ‘1’ to ‘void insert_node(tree*)’|
/home/ahashans/Documents/bst_new.cpp|40|error: return-statement with a
value, in function returning 'void' [-fpermissive]|
/home/ahashans/Documents/bst_new.cpp||In function ‘int main()’:|
/home/ahashans/Documents/bst_new.cpp|51|error: cannot convert ‘tree’ to
‘tree*’ for argument ‘1’ to ‘void insert_node(tree*)’|
||=== Build failed: 5 error(s), 0 warning(s) (0 minute(s), 0 second(s))
===|
理想情況下,您的 insert_node 的簽名應該為
tree* insert_node(node *new_node, tree* mytree)
這意味着請在 mytree 中插入 new_node 並返回一個帶有插入節點的新樹。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.