为什么输出会变成无穷大

问题描述 投票:0回答:1

这是我用来在BST中添加的代码。这是预购函数。为什么会变成无穷大?我从用户那里输入要添加的元素。但是输出却变成了无穷大。

    void add(){
      struct node* temp=(struct node *) malloc(sizeof(struct node));
      struct node* current=root;
      printf("\nEnter the data:\n");
      scanf("%d",&temp->data);
      while(current->left!=NULL && current->right!=NULL){
            parent=current;
        if(temp->data > parent->data){
            current=current->right;
        }
        else{
            current=current->left;
        }

      }
      if(temp->data > parent->data){
            parent->right=temp;
            parent->left=NULL;
        }
        else{
            parent->left=temp;
            parent->right=temp;
        }
    }

    void preorder(struct node* node)
    {
         if (node == NULL)
              return;

         /* first print data of node */
         printf("%d ", node->data);

         /* then recur on left subtree */
         preorder(node->left);

         /* now recur on right subtree */
         preorder(node->right);
    }
c data-structures binary-search-tree preorder
1个回答
0
投票

功能添加具有未定义的行为。

对于初学者,root最初可以等于NULL。因此,您可能不使用此方法

  struct node* current=root;
  //...
  while(current->left!=NULL && current->right!=NULL){

第二个循环

  while(current->left!=NULL && current->right!=NULL){
        parent=current;

不处理仅包含一个不等于NULL的子节点的节点。

而且您也不会在创建的节点温度的左侧和右侧设置为NULL数据成员。

因此函数定义无效。

© www.soinside.com 2019 - 2024. All rights reserved.