Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 我在做代码树,数据结构。但是,打印过程中有一个错误_C_Pointers_Data Structures_Tree_Nodes - Fatal编程技术网

C 我在做代码树,数据结构。但是,打印过程中有一个错误

C 我在做代码树,数据结构。但是,打印过程中有一个错误,c,pointers,data-structures,tree,nodes,C,Pointers,Data Structures,Tree,Nodes,插入过程似乎没有问题,但打印时只输出根节点。有什么问题? 文本错误 n=(节点*)m(节点大小) 打印、扫描 数据结构,树 struct node { int data; node* l, *r; }; 撇开语法和样式问题不谈,我注意到您的Insert函数中有一个逻辑错误。看起来您正在实现一个二叉搜索树,并且正在正确地遍历该树。但是,您实际上并没有插入到树中,因为节点p没有指向树;它只是节点的一个副本 考虑一下当我们有下面的树时会发生什么: 1 /

插入过程似乎没有问题,但打印时只输出根节点。有什么问题? 文本错误

  • n=(节点*)m(节点大小)
  • 打印、扫描
  • 数据结构,树

        struct node {
        int data;
        node* l, *r;
    };
    

    撇开语法和样式问题不谈,我注意到您的
    Insert
    函数中有一个逻辑错误。看起来您正在实现一个二叉搜索树,并且正在正确地遍历该树。但是,您实际上并没有插入到树中,因为节点p没有指向树;它只是节点的一个副本

    考虑一下当我们有下面的树时会发生什么:

         1
       /   \
     NULL  NULL
    
    让我们在树中插入2

    Insert(st, 2)
    Step 1: p is a COPY of the root of st, which is node 1
         1 ==  p
       /   \
      NULL NULL
    
    Step 2: Because p->data == 1 < 2, we move to the right and hit NULL
         1
       /   \
      NULL NULL == p
    
    Now we assign p to the new node n:
         1
       /   \
      NULL  NULL; p = n
    

    撇开语法和样式问题不谈,我注意到您的
    Insert
    函数中有一个逻辑错误。看起来您正在实现一个二叉搜索树,并且正在正确地遍历该树。但是,您实际上并没有插入到树中,因为节点p没有指向树;它只是节点的一个副本

    考虑一下当我们有下面的树时会发生什么:

         1
       /   \
     NULL  NULL
    
    让我们在树中插入2

    Insert(st, 2)
    Step 1: p is a COPY of the root of st, which is node 1
         1 ==  p
       /   \
      NULL NULL
    
    Step 2: Because p->data == 1 < 2, we move to the right and hit NULL
         1
       /   \
      NULL NULL == p
    
    Now we assign p to the new node n:
         1
       /   \
      NULL  NULL; p = n
    

    1) n=(node*)m(sizeof(node))->n=(node*)malloc(sizeof(node))2)print->printf,scan->scanfi如果编译器报告语法错误,请显示确切的消息。否。没有由编译器引起的语法错误。当代码上载到stackoverflow时,typedef、变量名等出现错误。如果没有语法错误,那么为什么在问题中提到语法错误??请澄清一下,您真的有宏
    m
    来替换
    malloc
    print
    ro替换
    printf
    ?那是自找麻烦。很多麻烦。1)n=(node*)m(sizeof(node))->n=(node*)malloc(sizeof(node))2)print->printf,scan->scanfi如果编译器报告语法错误,请显示确切的消息。否。没有由编译器引起的语法错误。当代码上载到stackoverflow时,typedef、变量名等出现错误。如果没有语法错误,那么为什么在问题中提到语法错误??请澄清一下,您真的有宏
    m
    来替换
    malloc
    print
    ro替换
    printf
    ?那是自找麻烦。很多麻烦。
    Insert(st, 2)
    Step 1: Let p be a pointer to the root of st, which is node 1
         1 <- p
       /   \
      NULL NULL
    
    Step 2: Because (*p)->data == 1 < 2, we move to the right (p = &((*p)->right)) and have *p == NULL
         1
       /   \
      NULL NULL <- p
    
    Now we have p point to to the new node n: *p = n
         1
       /   \
      NULL  n
    
    And have now added n into our tree successfully.