我尝试使用迭代在 BST 树中插入,但输出不完整。问题可能在哪里?

i tried insertion in BST tree using itteration but the output is incomplete. Where is might be the problem?

**我在BST中使用itteraton机制进行插入操作。我使用递归进行顺序遍历 swift 显示我的树,并知道我这样做是对还是错。但是,输出始终为 4 。我不明白嗯可能是什么问题。我的根没有更新吗? **

  #include<stdio.h>
  #include<stdlib.h>
  
  typedef struct Node{
    int data;
    struct Node *left;
    struct Node *right;
  }node;
  
  node *new(int data){   //create node
    node *pw;
    pw = (node *)malloc(sizeof(node *));
    pw->data = data;
    pw->left = NULL;
    pw->right= NULL;
    
    return pw;
    
  }
  
  node *insert(node *root, int data ){  //insert using itteration
    node *pr;
    pr = root;
    
    
    if(root==NULL)
    return new(data);
    
    while(pr!= NULL){
        if(data< pr->data){
            if(pr->left==NULL){
                pr->data = data;
                pr=NULL;
              }
            
            else{
            pr= pr->left; 
          }
          }else if(data> pr->data){
            if(pr->right==NULL){
                    pr->data = data;
                    pr=NULL;
              }
        
            else{
            pr= pr->right; 
            
          }
      }
  }
  return pr;
}

 void inorder(node *root) {
  if (root != NULL) {
    // Traverse left
    inorder(root->left);

    // Traverse root
    printf("%d -> ", root->data);

    // Traverse right
    inorder(root->right);
  }
}
  
  void main(){
    node* root = NULL;
    root = insert(root,5);
    root = insert(root,6);
    root = insert(root,4);
    inorder(root);   //inorder traversal for displaying tree
  }

您似乎总是在更改父节点的数据,而不是创建一个新节点作为父节点的子节点。 所以而不是:

   if(pr->left==NULL){
        pr->data = data;
        pr=NULL;
      }

需要:

       if(pr->left==NULL){
        pr->left = new(data);
        break; /*you have inserted the node, a break will stop the loop*/
      }

应该对右侧的 if 语句应用相同的更改。

此外 - insert 有此 return 语句:return pr 并且您将其保存到调用方的 root 中。但是,只有当 root 开始时为 NULL 时,才会更改 root。换句话说:返回 pr 是错误的。

因此做这个改变:

return pr; ---> return root;