在BST中插入节点

时间:2015-06-16 23:33:16

标签: c binary-search-tree

我知道如何在二进制搜索树中插入节点,但在下面的代码中,实际节点不包含指向下一个节点的指针。

有人可以给我提示如何在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;
}

2 个答案:

答案 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;