我知道如何在二进制搜索树中插入节点,但在下面的代码中,实际节点不包含指向下一个节点的指针。
有人可以给我提示如何在insert_item函数中导航Node的左侧或右侧? 有人可以请我保释。
typedef struct Link
{
struct link *left;
struct link *right;
} Link;
typedef struct Node
{
struct Link link;
unsigned char c;
} Node;
Link* create_link()
{
Link* first_link;
first_link = malloc( sizeof( Link ) );
return( first_link );
}
Node* create_node( unsigned char val )
{
Node* temp = malloc( sizeof( temp ) );
temp->link.left = create_link();
temp->link.right = create_link();
temp->c = val;
return( temp );
}
Link* insert_link( Link *link, key )
{
}
void insert_item( Node* root, unsigned char key, L )
{
if( !root )
{
root = create_node( key );
}
/* Otherwise, recur down the tree */
else
{
if( key < root->c )
{
insert_item( root->link ); // The node does not have pointer ?? how would I traverse left or right?
}
}
}
int main()
{
Node* root = NULL;
root = create_node( 60 );
return 0;
}
答案 0 :(得分:0)
这至少可以说:
Node* create_node( unsigned char val )
{
Node* temp = malloc( sizeof( temp ) );
temp->link.left = create_link();
temp->link.right = create_link();
temp->c = val;
return( temp );
}
您正在为指针sizeof(temp)
分配空间,因为temp
是指针。
您应该为结构分配内存:
[C++] Node * temp = new Node;
[C] Node * temp = malloc(sizeof(Node));
如果它们没有指向任何东西,你应该指定指向0或某种 leaf 值的指针:
[C++] struct Link
{
Link() : left(0), right(0)
{ }
Link * left;
Link * right;
};
[C] temp->link.right = 0; temp->link.left = 0;
在二叉树中,您可以将新节点作为父节点的右子节点放置。确定取决于树的种类或用途。
注意:在C ++中,您应该为链接使用智能指针。
答案 1 :(得分:-2)
创建它们后,您将左右指针设置为NULL。摆脱以下代码,你应该好好去。
temp-&gt; link.left = NULL; temp-&gt; link.right = NULL;